Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/openvswitch/flow_netlink.c
170831 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright (c) 2007-2017 Nicira, Inc.
4
*/
5
6
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7
8
#include "flow.h"
9
#include "datapath.h"
10
#include <linux/uaccess.h>
11
#include <linux/netdevice.h>
12
#include <linux/etherdevice.h>
13
#include <linux/if_ether.h>
14
#include <linux/if_vlan.h>
15
#include <net/llc_pdu.h>
16
#include <linux/kernel.h>
17
#include <linux/jhash.h>
18
#include <linux/jiffies.h>
19
#include <linux/llc.h>
20
#include <linux/module.h>
21
#include <linux/in.h>
22
#include <linux/rcupdate.h>
23
#include <linux/if_arp.h>
24
#include <linux/ip.h>
25
#include <linux/ipv6.h>
26
#include <linux/sctp.h>
27
#include <linux/tcp.h>
28
#include <linux/udp.h>
29
#include <linux/icmp.h>
30
#include <linux/icmpv6.h>
31
#include <linux/rculist.h>
32
#include <net/geneve.h>
33
#include <net/ip.h>
34
#include <net/ipv6.h>
35
#include <net/ndisc.h>
36
#include <net/mpls.h>
37
#include <net/vxlan.h>
38
#include <net/tun_proto.h>
39
#include <net/erspan.h>
40
41
#include "drop.h"
42
#include "flow_netlink.h"
43
44
struct ovs_len_tbl {
45
int len;
46
const struct ovs_len_tbl *next;
47
};
48
49
#define OVS_ATTR_NESTED -1
50
#define OVS_ATTR_VARIABLE -2
51
#define OVS_COPY_ACTIONS_MAX_DEPTH 16
52
53
static bool actions_may_change_flow(const struct nlattr *actions)
54
{
55
struct nlattr *nla;
56
int rem;
57
58
nla_for_each_nested(nla, actions, rem) {
59
u16 action = nla_type(nla);
60
61
switch (action) {
62
case OVS_ACTION_ATTR_OUTPUT:
63
case OVS_ACTION_ATTR_RECIRC:
64
case OVS_ACTION_ATTR_TRUNC:
65
case OVS_ACTION_ATTR_USERSPACE:
66
case OVS_ACTION_ATTR_DROP:
67
case OVS_ACTION_ATTR_PSAMPLE:
68
break;
69
70
case OVS_ACTION_ATTR_CT:
71
case OVS_ACTION_ATTR_CT_CLEAR:
72
case OVS_ACTION_ATTR_HASH:
73
case OVS_ACTION_ATTR_POP_ETH:
74
case OVS_ACTION_ATTR_POP_MPLS:
75
case OVS_ACTION_ATTR_POP_NSH:
76
case OVS_ACTION_ATTR_POP_VLAN:
77
case OVS_ACTION_ATTR_PUSH_ETH:
78
case OVS_ACTION_ATTR_PUSH_MPLS:
79
case OVS_ACTION_ATTR_PUSH_NSH:
80
case OVS_ACTION_ATTR_PUSH_VLAN:
81
case OVS_ACTION_ATTR_SAMPLE:
82
case OVS_ACTION_ATTR_SET:
83
case OVS_ACTION_ATTR_SET_MASKED:
84
case OVS_ACTION_ATTR_METER:
85
case OVS_ACTION_ATTR_CHECK_PKT_LEN:
86
case OVS_ACTION_ATTR_ADD_MPLS:
87
case OVS_ACTION_ATTR_DEC_TTL:
88
default:
89
return true;
90
}
91
}
92
return false;
93
}
94
95
static void update_range(struct sw_flow_match *match,
96
size_t offset, size_t size, bool is_mask)
97
{
98
struct sw_flow_key_range *range;
99
size_t start = rounddown(offset, sizeof(long));
100
size_t end = roundup(offset + size, sizeof(long));
101
102
if (!is_mask)
103
range = &match->range;
104
else
105
range = &match->mask->range;
106
107
if (range->start == range->end) {
108
range->start = start;
109
range->end = end;
110
return;
111
}
112
113
if (range->start > start)
114
range->start = start;
115
116
if (range->end < end)
117
range->end = end;
118
}
119
120
#define SW_FLOW_KEY_PUT(match, field, value, is_mask) \
121
do { \
122
update_range(match, offsetof(struct sw_flow_key, field), \
123
sizeof((match)->key->field), is_mask); \
124
if (is_mask) \
125
(match)->mask->key.field = value; \
126
else \
127
(match)->key->field = value; \
128
} while (0)
129
130
#define SW_FLOW_KEY_MEMCPY_OFFSET(match, offset, value_p, len, is_mask) \
131
do { \
132
update_range(match, offset, len, is_mask); \
133
if (is_mask) \
134
memcpy((u8 *)&(match)->mask->key + offset, value_p, \
135
len); \
136
else \
137
memcpy((u8 *)(match)->key + offset, value_p, len); \
138
} while (0)
139
140
#define SW_FLOW_KEY_MEMCPY(match, field, value_p, len, is_mask) \
141
SW_FLOW_KEY_MEMCPY_OFFSET(match, offsetof(struct sw_flow_key, field), \
142
value_p, len, is_mask)
143
144
#define SW_FLOW_KEY_MEMSET_FIELD(match, field, value, is_mask) \
145
do { \
146
update_range(match, offsetof(struct sw_flow_key, field), \
147
sizeof((match)->key->field), is_mask); \
148
if (is_mask) \
149
memset((u8 *)&(match)->mask->key.field, value, \
150
sizeof((match)->mask->key.field)); \
151
else \
152
memset((u8 *)&(match)->key->field, value, \
153
sizeof((match)->key->field)); \
154
} while (0)
155
156
#define SW_FLOW_KEY_BITMAP_COPY(match, field, value_p, nbits, is_mask) ({ \
157
update_range(match, offsetof(struct sw_flow_key, field), \
158
bitmap_size(nbits), is_mask); \
159
bitmap_copy(is_mask ? (match)->mask->key.field : (match)->key->field, \
160
value_p, nbits); \
161
})
162
163
static bool match_validate(const struct sw_flow_match *match,
164
u64 key_attrs, u64 mask_attrs, bool log)
165
{
166
u64 key_expected = 0;
167
u64 mask_allowed = key_attrs; /* At most allow all key attributes */
168
169
/* The following mask attributes allowed only if they
170
* pass the validation tests. */
171
mask_allowed &= ~((1 << OVS_KEY_ATTR_IPV4)
172
| (1 << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4)
173
| (1 << OVS_KEY_ATTR_IPV6)
174
| (1 << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6)
175
| (1 << OVS_KEY_ATTR_TCP)
176
| (1 << OVS_KEY_ATTR_TCP_FLAGS)
177
| (1 << OVS_KEY_ATTR_UDP)
178
| (1 << OVS_KEY_ATTR_SCTP)
179
| (1 << OVS_KEY_ATTR_ICMP)
180
| (1 << OVS_KEY_ATTR_ICMPV6)
181
| (1 << OVS_KEY_ATTR_ARP)
182
| (1 << OVS_KEY_ATTR_ND)
183
| (1 << OVS_KEY_ATTR_MPLS)
184
| (1 << OVS_KEY_ATTR_NSH));
185
186
/* Always allowed mask fields. */
187
mask_allowed |= ((1 << OVS_KEY_ATTR_TUNNEL)
188
| (1 << OVS_KEY_ATTR_IN_PORT)
189
| (1 << OVS_KEY_ATTR_ETHERTYPE));
190
191
/* Check key attributes. */
192
if (match->key->eth.type == htons(ETH_P_ARP)
193
|| match->key->eth.type == htons(ETH_P_RARP)) {
194
key_expected |= 1 << OVS_KEY_ATTR_ARP;
195
if (match->mask && (match->mask->key.eth.type == htons(0xffff)))
196
mask_allowed |= 1 << OVS_KEY_ATTR_ARP;
197
}
198
199
if (eth_p_mpls(match->key->eth.type)) {
200
key_expected |= 1 << OVS_KEY_ATTR_MPLS;
201
if (match->mask && (match->mask->key.eth.type == htons(0xffff)))
202
mask_allowed |= 1 << OVS_KEY_ATTR_MPLS;
203
}
204
205
if (match->key->eth.type == htons(ETH_P_IP)) {
206
key_expected |= 1 << OVS_KEY_ATTR_IPV4;
207
if (match->mask && match->mask->key.eth.type == htons(0xffff)) {
208
mask_allowed |= 1 << OVS_KEY_ATTR_IPV4;
209
mask_allowed |= 1 << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4;
210
}
211
212
if (match->key->ip.frag != OVS_FRAG_TYPE_LATER) {
213
if (match->key->ip.proto == IPPROTO_UDP) {
214
key_expected |= 1 << OVS_KEY_ATTR_UDP;
215
if (match->mask && (match->mask->key.ip.proto == 0xff))
216
mask_allowed |= 1 << OVS_KEY_ATTR_UDP;
217
}
218
219
if (match->key->ip.proto == IPPROTO_SCTP) {
220
key_expected |= 1 << OVS_KEY_ATTR_SCTP;
221
if (match->mask && (match->mask->key.ip.proto == 0xff))
222
mask_allowed |= 1 << OVS_KEY_ATTR_SCTP;
223
}
224
225
if (match->key->ip.proto == IPPROTO_TCP) {
226
key_expected |= 1 << OVS_KEY_ATTR_TCP;
227
key_expected |= 1 << OVS_KEY_ATTR_TCP_FLAGS;
228
if (match->mask && (match->mask->key.ip.proto == 0xff)) {
229
mask_allowed |= 1 << OVS_KEY_ATTR_TCP;
230
mask_allowed |= 1 << OVS_KEY_ATTR_TCP_FLAGS;
231
}
232
}
233
234
if (match->key->ip.proto == IPPROTO_ICMP) {
235
key_expected |= 1 << OVS_KEY_ATTR_ICMP;
236
if (match->mask && (match->mask->key.ip.proto == 0xff))
237
mask_allowed |= 1 << OVS_KEY_ATTR_ICMP;
238
}
239
}
240
}
241
242
if (match->key->eth.type == htons(ETH_P_IPV6)) {
243
key_expected |= 1 << OVS_KEY_ATTR_IPV6;
244
if (match->mask && match->mask->key.eth.type == htons(0xffff)) {
245
mask_allowed |= 1 << OVS_KEY_ATTR_IPV6;
246
mask_allowed |= 1 << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6;
247
}
248
249
if (match->key->ip.frag != OVS_FRAG_TYPE_LATER) {
250
if (match->key->ip.proto == IPPROTO_UDP) {
251
key_expected |= 1 << OVS_KEY_ATTR_UDP;
252
if (match->mask && (match->mask->key.ip.proto == 0xff))
253
mask_allowed |= 1 << OVS_KEY_ATTR_UDP;
254
}
255
256
if (match->key->ip.proto == IPPROTO_SCTP) {
257
key_expected |= 1 << OVS_KEY_ATTR_SCTP;
258
if (match->mask && (match->mask->key.ip.proto == 0xff))
259
mask_allowed |= 1 << OVS_KEY_ATTR_SCTP;
260
}
261
262
if (match->key->ip.proto == IPPROTO_TCP) {
263
key_expected |= 1 << OVS_KEY_ATTR_TCP;
264
key_expected |= 1 << OVS_KEY_ATTR_TCP_FLAGS;
265
if (match->mask && (match->mask->key.ip.proto == 0xff)) {
266
mask_allowed |= 1 << OVS_KEY_ATTR_TCP;
267
mask_allowed |= 1 << OVS_KEY_ATTR_TCP_FLAGS;
268
}
269
}
270
271
if (match->key->ip.proto == IPPROTO_ICMPV6) {
272
key_expected |= 1 << OVS_KEY_ATTR_ICMPV6;
273
if (match->mask && (match->mask->key.ip.proto == 0xff))
274
mask_allowed |= 1 << OVS_KEY_ATTR_ICMPV6;
275
276
if (match->key->tp.src ==
277
htons(NDISC_NEIGHBOUR_SOLICITATION) ||
278
match->key->tp.src == htons(NDISC_NEIGHBOUR_ADVERTISEMENT)) {
279
key_expected |= 1 << OVS_KEY_ATTR_ND;
280
/* Original direction conntrack tuple
281
* uses the same space as the ND fields
282
* in the key, so both are not allowed
283
* at the same time.
284
*/
285
mask_allowed &= ~(1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6);
286
if (match->mask && (match->mask->key.tp.src == htons(0xff)))
287
mask_allowed |= 1 << OVS_KEY_ATTR_ND;
288
}
289
}
290
}
291
}
292
293
if (match->key->eth.type == htons(ETH_P_NSH)) {
294
key_expected |= 1 << OVS_KEY_ATTR_NSH;
295
if (match->mask &&
296
match->mask->key.eth.type == htons(0xffff)) {
297
mask_allowed |= 1 << OVS_KEY_ATTR_NSH;
298
}
299
}
300
301
if ((key_attrs & key_expected) != key_expected) {
302
/* Key attributes check failed. */
303
OVS_NLERR(log, "Missing key (keys=%llx, expected=%llx)",
304
(unsigned long long)key_attrs,
305
(unsigned long long)key_expected);
306
return false;
307
}
308
309
if ((mask_attrs & mask_allowed) != mask_attrs) {
310
/* Mask attributes check failed. */
311
OVS_NLERR(log, "Unexpected mask (mask=%llx, allowed=%llx)",
312
(unsigned long long)mask_attrs,
313
(unsigned long long)mask_allowed);
314
return false;
315
}
316
317
return true;
318
}
319
320
size_t ovs_tun_key_attr_size(void)
321
{
322
/* Whenever adding new OVS_TUNNEL_KEY_ FIELDS, we should consider
323
* updating this function.
324
*/
325
return nla_total_size_64bit(8) /* OVS_TUNNEL_KEY_ATTR_ID */
326
+ nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV[46]_SRC */
327
+ nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV[46]_DST */
328
+ nla_total_size(1) /* OVS_TUNNEL_KEY_ATTR_TOS */
329
+ nla_total_size(1) /* OVS_TUNNEL_KEY_ATTR_TTL */
330
+ nla_total_size(0) /* OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT */
331
+ nla_total_size(0) /* OVS_TUNNEL_KEY_ATTR_CSUM */
332
+ nla_total_size(0) /* OVS_TUNNEL_KEY_ATTR_OAM */
333
+ nla_total_size(256) /* OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS */
334
/* OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS and
335
* OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS is mutually exclusive with
336
* OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS and covered by it.
337
*/
338
+ nla_total_size(2) /* OVS_TUNNEL_KEY_ATTR_TP_SRC */
339
+ nla_total_size(2); /* OVS_TUNNEL_KEY_ATTR_TP_DST */
340
}
341
342
static size_t ovs_nsh_key_attr_size(void)
343
{
344
/* Whenever adding new OVS_NSH_KEY_ FIELDS, we should consider
345
* updating this function.
346
*/
347
return nla_total_size(NSH_BASE_HDR_LEN) /* OVS_NSH_KEY_ATTR_BASE */
348
/* OVS_NSH_KEY_ATTR_MD1 and OVS_NSH_KEY_ATTR_MD2 are
349
* mutually exclusive, so the bigger one can cover
350
* the small one.
351
*/
352
+ nla_total_size(NSH_CTX_HDRS_MAX_LEN);
353
}
354
355
size_t ovs_key_attr_size(void)
356
{
357
/* Whenever adding new OVS_KEY_ FIELDS, we should consider
358
* updating this function.
359
*/
360
BUILD_BUG_ON(OVS_KEY_ATTR_MAX != 32);
361
362
return nla_total_size(4) /* OVS_KEY_ATTR_PRIORITY */
363
+ nla_total_size(0) /* OVS_KEY_ATTR_TUNNEL */
364
+ ovs_tun_key_attr_size()
365
+ nla_total_size(4) /* OVS_KEY_ATTR_IN_PORT */
366
+ nla_total_size(4) /* OVS_KEY_ATTR_SKB_MARK */
367
+ nla_total_size(4) /* OVS_KEY_ATTR_DP_HASH */
368
+ nla_total_size(4) /* OVS_KEY_ATTR_RECIRC_ID */
369
+ nla_total_size(4) /* OVS_KEY_ATTR_CT_STATE */
370
+ nla_total_size(2) /* OVS_KEY_ATTR_CT_ZONE */
371
+ nla_total_size(4) /* OVS_KEY_ATTR_CT_MARK */
372
+ nla_total_size(16) /* OVS_KEY_ATTR_CT_LABELS */
373
+ nla_total_size(40) /* OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6 */
374
+ nla_total_size(0) /* OVS_KEY_ATTR_NSH */
375
+ ovs_nsh_key_attr_size()
376
+ nla_total_size(12) /* OVS_KEY_ATTR_ETHERNET */
377
+ nla_total_size(2) /* OVS_KEY_ATTR_ETHERTYPE */
378
+ nla_total_size(4) /* OVS_KEY_ATTR_VLAN */
379
+ nla_total_size(0) /* OVS_KEY_ATTR_ENCAP */
380
+ nla_total_size(2) /* OVS_KEY_ATTR_ETHERTYPE */
381
+ nla_total_size(40) /* OVS_KEY_ATTR_IPV6 */
382
+ nla_total_size(2) /* OVS_KEY_ATTR_ICMPV6 */
383
+ nla_total_size(28) /* OVS_KEY_ATTR_ND */
384
+ nla_total_size(2); /* OVS_KEY_ATTR_IPV6_EXTHDRS */
385
}
386
387
static const struct ovs_len_tbl ovs_vxlan_ext_key_lens[OVS_VXLAN_EXT_MAX + 1] = {
388
[OVS_VXLAN_EXT_GBP] = { .len = sizeof(u32) },
389
};
390
391
static const struct ovs_len_tbl ovs_tunnel_key_lens[OVS_TUNNEL_KEY_ATTR_MAX + 1] = {
392
[OVS_TUNNEL_KEY_ATTR_ID] = { .len = sizeof(u64) },
393
[OVS_TUNNEL_KEY_ATTR_IPV4_SRC] = { .len = sizeof(u32) },
394
[OVS_TUNNEL_KEY_ATTR_IPV4_DST] = { .len = sizeof(u32) },
395
[OVS_TUNNEL_KEY_ATTR_TOS] = { .len = 1 },
396
[OVS_TUNNEL_KEY_ATTR_TTL] = { .len = 1 },
397
[OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT] = { .len = 0 },
398
[OVS_TUNNEL_KEY_ATTR_CSUM] = { .len = 0 },
399
[OVS_TUNNEL_KEY_ATTR_TP_SRC] = { .len = sizeof(u16) },
400
[OVS_TUNNEL_KEY_ATTR_TP_DST] = { .len = sizeof(u16) },
401
[OVS_TUNNEL_KEY_ATTR_OAM] = { .len = 0 },
402
[OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS] = { .len = OVS_ATTR_VARIABLE },
403
[OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS] = { .len = OVS_ATTR_NESTED,
404
.next = ovs_vxlan_ext_key_lens },
405
[OVS_TUNNEL_KEY_ATTR_IPV6_SRC] = { .len = sizeof(struct in6_addr) },
406
[OVS_TUNNEL_KEY_ATTR_IPV6_DST] = { .len = sizeof(struct in6_addr) },
407
[OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS] = { .len = OVS_ATTR_VARIABLE },
408
[OVS_TUNNEL_KEY_ATTR_IPV4_INFO_BRIDGE] = { .len = 0 },
409
};
410
411
static const struct ovs_len_tbl
412
ovs_nsh_key_attr_lens[OVS_NSH_KEY_ATTR_MAX + 1] = {
413
[OVS_NSH_KEY_ATTR_BASE] = { .len = sizeof(struct ovs_nsh_key_base) },
414
[OVS_NSH_KEY_ATTR_MD1] = { .len = sizeof(struct ovs_nsh_key_md1) },
415
[OVS_NSH_KEY_ATTR_MD2] = { .len = OVS_ATTR_VARIABLE },
416
};
417
418
/* The size of the argument for each %OVS_KEY_ATTR_* Netlink attribute. */
419
static const struct ovs_len_tbl ovs_key_lens[OVS_KEY_ATTR_MAX + 1] = {
420
[OVS_KEY_ATTR_ENCAP] = { .len = OVS_ATTR_NESTED },
421
[OVS_KEY_ATTR_PRIORITY] = { .len = sizeof(u32) },
422
[OVS_KEY_ATTR_IN_PORT] = { .len = sizeof(u32) },
423
[OVS_KEY_ATTR_SKB_MARK] = { .len = sizeof(u32) },
424
[OVS_KEY_ATTR_ETHERNET] = { .len = sizeof(struct ovs_key_ethernet) },
425
[OVS_KEY_ATTR_VLAN] = { .len = sizeof(__be16) },
426
[OVS_KEY_ATTR_ETHERTYPE] = { .len = sizeof(__be16) },
427
[OVS_KEY_ATTR_IPV4] = { .len = sizeof(struct ovs_key_ipv4) },
428
[OVS_KEY_ATTR_IPV6] = { .len = sizeof(struct ovs_key_ipv6) },
429
[OVS_KEY_ATTR_TCP] = { .len = sizeof(struct ovs_key_tcp) },
430
[OVS_KEY_ATTR_TCP_FLAGS] = { .len = sizeof(__be16) },
431
[OVS_KEY_ATTR_UDP] = { .len = sizeof(struct ovs_key_udp) },
432
[OVS_KEY_ATTR_SCTP] = { .len = sizeof(struct ovs_key_sctp) },
433
[OVS_KEY_ATTR_ICMP] = { .len = sizeof(struct ovs_key_icmp) },
434
[OVS_KEY_ATTR_ICMPV6] = { .len = sizeof(struct ovs_key_icmpv6) },
435
[OVS_KEY_ATTR_ARP] = { .len = sizeof(struct ovs_key_arp) },
436
[OVS_KEY_ATTR_ND] = { .len = sizeof(struct ovs_key_nd) },
437
[OVS_KEY_ATTR_RECIRC_ID] = { .len = sizeof(u32) },
438
[OVS_KEY_ATTR_DP_HASH] = { .len = sizeof(u32) },
439
[OVS_KEY_ATTR_TUNNEL] = { .len = OVS_ATTR_NESTED,
440
.next = ovs_tunnel_key_lens, },
441
[OVS_KEY_ATTR_MPLS] = { .len = OVS_ATTR_VARIABLE },
442
[OVS_KEY_ATTR_CT_STATE] = { .len = sizeof(u32) },
443
[OVS_KEY_ATTR_CT_ZONE] = { .len = sizeof(u16) },
444
[OVS_KEY_ATTR_CT_MARK] = { .len = sizeof(u32) },
445
[OVS_KEY_ATTR_CT_LABELS] = { .len = sizeof(struct ovs_key_ct_labels) },
446
[OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4] = {
447
.len = sizeof(struct ovs_key_ct_tuple_ipv4) },
448
[OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6] = {
449
.len = sizeof(struct ovs_key_ct_tuple_ipv6) },
450
[OVS_KEY_ATTR_NSH] = { .len = OVS_ATTR_NESTED,
451
.next = ovs_nsh_key_attr_lens, },
452
[OVS_KEY_ATTR_IPV6_EXTHDRS] = {
453
.len = sizeof(struct ovs_key_ipv6_exthdrs) },
454
};
455
456
static bool check_attr_len(unsigned int attr_len, unsigned int expected_len)
457
{
458
return expected_len == attr_len ||
459
expected_len == OVS_ATTR_NESTED ||
460
expected_len == OVS_ATTR_VARIABLE;
461
}
462
463
static bool is_all_zero(const u8 *fp, size_t size)
464
{
465
int i;
466
467
if (!fp)
468
return false;
469
470
for (i = 0; i < size; i++)
471
if (fp[i])
472
return false;
473
474
return true;
475
}
476
477
static int __parse_flow_nlattrs(const struct nlattr *attr,
478
const struct nlattr *a[],
479
u64 *attrsp, bool log, bool nz)
480
{
481
const struct nlattr *nla;
482
u64 attrs;
483
int rem;
484
485
attrs = *attrsp;
486
nla_for_each_nested(nla, attr, rem) {
487
u16 type = nla_type(nla);
488
int expected_len;
489
490
if (type > OVS_KEY_ATTR_MAX) {
491
OVS_NLERR(log, "Key type %d is out of range max %d",
492
type, OVS_KEY_ATTR_MAX);
493
return -EINVAL;
494
}
495
496
if (type == OVS_KEY_ATTR_PACKET_TYPE ||
497
type == OVS_KEY_ATTR_ND_EXTENSIONS ||
498
type == OVS_KEY_ATTR_TUNNEL_INFO) {
499
OVS_NLERR(log, "Key type %d is not supported", type);
500
return -EINVAL;
501
}
502
503
if (attrs & (1ULL << type)) {
504
OVS_NLERR(log, "Duplicate key (type %d).", type);
505
return -EINVAL;
506
}
507
508
expected_len = ovs_key_lens[type].len;
509
if (!check_attr_len(nla_len(nla), expected_len)) {
510
OVS_NLERR(log, "Key %d has unexpected len %d expected %d",
511
type, nla_len(nla), expected_len);
512
return -EINVAL;
513
}
514
515
if (!nz || !is_all_zero(nla_data(nla), nla_len(nla))) {
516
attrs |= 1ULL << type;
517
a[type] = nla;
518
}
519
}
520
if (rem) {
521
OVS_NLERR(log, "Message has %d unknown bytes.", rem);
522
return -EINVAL;
523
}
524
525
*attrsp = attrs;
526
return 0;
527
}
528
529
static int parse_flow_mask_nlattrs(const struct nlattr *attr,
530
const struct nlattr *a[], u64 *attrsp,
531
bool log)
532
{
533
return __parse_flow_nlattrs(attr, a, attrsp, log, true);
534
}
535
536
int parse_flow_nlattrs(const struct nlattr *attr, const struct nlattr *a[],
537
u64 *attrsp, bool log)
538
{
539
return __parse_flow_nlattrs(attr, a, attrsp, log, false);
540
}
541
542
static int genev_tun_opt_from_nlattr(const struct nlattr *a,
543
struct sw_flow_match *match, bool is_mask,
544
bool log)
545
{
546
unsigned long opt_key_offset;
547
548
if (nla_len(a) > sizeof(match->key->tun_opts)) {
549
OVS_NLERR(log, "Geneve option length err (len %d, max %zu).",
550
nla_len(a), sizeof(match->key->tun_opts));
551
return -EINVAL;
552
}
553
554
if (nla_len(a) % 4 != 0) {
555
OVS_NLERR(log, "Geneve opt len %d is not a multiple of 4.",
556
nla_len(a));
557
return -EINVAL;
558
}
559
560
/* We need to record the length of the options passed
561
* down, otherwise packets with the same format but
562
* additional options will be silently matched.
563
*/
564
if (!is_mask) {
565
SW_FLOW_KEY_PUT(match, tun_opts_len, nla_len(a),
566
false);
567
} else {
568
/* This is somewhat unusual because it looks at
569
* both the key and mask while parsing the
570
* attributes (and by extension assumes the key
571
* is parsed first). Normally, we would verify
572
* that each is the correct length and that the
573
* attributes line up in the validate function.
574
* However, that is difficult because this is
575
* variable length and we won't have the
576
* information later.
577
*/
578
if (match->key->tun_opts_len != nla_len(a)) {
579
OVS_NLERR(log, "Geneve option len %d != mask len %d",
580
match->key->tun_opts_len, nla_len(a));
581
return -EINVAL;
582
}
583
584
SW_FLOW_KEY_PUT(match, tun_opts_len, 0xff, true);
585
}
586
587
opt_key_offset = TUN_METADATA_OFFSET(nla_len(a));
588
SW_FLOW_KEY_MEMCPY_OFFSET(match, opt_key_offset, nla_data(a),
589
nla_len(a), is_mask);
590
return 0;
591
}
592
593
static int vxlan_tun_opt_from_nlattr(const struct nlattr *attr,
594
struct sw_flow_match *match, bool is_mask,
595
bool log)
596
{
597
struct nlattr *a;
598
int rem;
599
unsigned long opt_key_offset;
600
struct vxlan_metadata opts;
601
602
BUILD_BUG_ON(sizeof(opts) > sizeof(match->key->tun_opts));
603
604
memset(&opts, 0, sizeof(opts));
605
nla_for_each_nested(a, attr, rem) {
606
int type = nla_type(a);
607
608
if (type > OVS_VXLAN_EXT_MAX) {
609
OVS_NLERR(log, "VXLAN extension %d out of range max %d",
610
type, OVS_VXLAN_EXT_MAX);
611
return -EINVAL;
612
}
613
614
if (!check_attr_len(nla_len(a),
615
ovs_vxlan_ext_key_lens[type].len)) {
616
OVS_NLERR(log, "VXLAN extension %d has unexpected len %d expected %d",
617
type, nla_len(a),
618
ovs_vxlan_ext_key_lens[type].len);
619
return -EINVAL;
620
}
621
622
switch (type) {
623
case OVS_VXLAN_EXT_GBP:
624
opts.gbp = nla_get_u32(a);
625
break;
626
default:
627
OVS_NLERR(log, "Unknown VXLAN extension attribute %d",
628
type);
629
return -EINVAL;
630
}
631
}
632
if (rem) {
633
OVS_NLERR(log, "VXLAN extension message has %d unknown bytes.",
634
rem);
635
return -EINVAL;
636
}
637
638
if (!is_mask)
639
SW_FLOW_KEY_PUT(match, tun_opts_len, sizeof(opts), false);
640
else
641
SW_FLOW_KEY_PUT(match, tun_opts_len, 0xff, true);
642
643
opt_key_offset = TUN_METADATA_OFFSET(sizeof(opts));
644
SW_FLOW_KEY_MEMCPY_OFFSET(match, opt_key_offset, &opts, sizeof(opts),
645
is_mask);
646
return 0;
647
}
648
649
static int erspan_tun_opt_from_nlattr(const struct nlattr *a,
650
struct sw_flow_match *match, bool is_mask,
651
bool log)
652
{
653
unsigned long opt_key_offset;
654
655
BUILD_BUG_ON(sizeof(struct erspan_metadata) >
656
sizeof(match->key->tun_opts));
657
658
if (nla_len(a) > sizeof(match->key->tun_opts)) {
659
OVS_NLERR(log, "ERSPAN option length err (len %d, max %zu).",
660
nla_len(a), sizeof(match->key->tun_opts));
661
return -EINVAL;
662
}
663
664
if (!is_mask)
665
SW_FLOW_KEY_PUT(match, tun_opts_len,
666
sizeof(struct erspan_metadata), false);
667
else
668
SW_FLOW_KEY_PUT(match, tun_opts_len, 0xff, true);
669
670
opt_key_offset = TUN_METADATA_OFFSET(nla_len(a));
671
SW_FLOW_KEY_MEMCPY_OFFSET(match, opt_key_offset, nla_data(a),
672
nla_len(a), is_mask);
673
return 0;
674
}
675
676
static int ip_tun_from_nlattr(const struct nlattr *attr,
677
struct sw_flow_match *match, bool is_mask,
678
bool log)
679
{
680
bool ttl = false, ipv4 = false, ipv6 = false;
681
IP_TUNNEL_DECLARE_FLAGS(tun_flags) = { };
682
bool info_bridge_mode = false;
683
int opts_type = 0;
684
struct nlattr *a;
685
int rem;
686
687
nla_for_each_nested(a, attr, rem) {
688
int type = nla_type(a);
689
int err;
690
691
if (type > OVS_TUNNEL_KEY_ATTR_MAX) {
692
OVS_NLERR(log, "Tunnel attr %d out of range max %d",
693
type, OVS_TUNNEL_KEY_ATTR_MAX);
694
return -EINVAL;
695
}
696
697
if (!check_attr_len(nla_len(a),
698
ovs_tunnel_key_lens[type].len)) {
699
OVS_NLERR(log, "Tunnel attr %d has unexpected len %d expected %d",
700
type, nla_len(a), ovs_tunnel_key_lens[type].len);
701
return -EINVAL;
702
}
703
704
switch (type) {
705
case OVS_TUNNEL_KEY_ATTR_ID:
706
SW_FLOW_KEY_PUT(match, tun_key.tun_id,
707
nla_get_be64(a), is_mask);
708
__set_bit(IP_TUNNEL_KEY_BIT, tun_flags);
709
break;
710
case OVS_TUNNEL_KEY_ATTR_IPV4_SRC:
711
SW_FLOW_KEY_PUT(match, tun_key.u.ipv4.src,
712
nla_get_in_addr(a), is_mask);
713
ipv4 = true;
714
break;
715
case OVS_TUNNEL_KEY_ATTR_IPV4_DST:
716
SW_FLOW_KEY_PUT(match, tun_key.u.ipv4.dst,
717
nla_get_in_addr(a), is_mask);
718
ipv4 = true;
719
break;
720
case OVS_TUNNEL_KEY_ATTR_IPV6_SRC:
721
SW_FLOW_KEY_PUT(match, tun_key.u.ipv6.src,
722
nla_get_in6_addr(a), is_mask);
723
ipv6 = true;
724
break;
725
case OVS_TUNNEL_KEY_ATTR_IPV6_DST:
726
SW_FLOW_KEY_PUT(match, tun_key.u.ipv6.dst,
727
nla_get_in6_addr(a), is_mask);
728
ipv6 = true;
729
break;
730
case OVS_TUNNEL_KEY_ATTR_TOS:
731
SW_FLOW_KEY_PUT(match, tun_key.tos,
732
nla_get_u8(a), is_mask);
733
break;
734
case OVS_TUNNEL_KEY_ATTR_TTL:
735
SW_FLOW_KEY_PUT(match, tun_key.ttl,
736
nla_get_u8(a), is_mask);
737
ttl = true;
738
break;
739
case OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT:
740
__set_bit(IP_TUNNEL_DONT_FRAGMENT_BIT, tun_flags);
741
break;
742
case OVS_TUNNEL_KEY_ATTR_CSUM:
743
__set_bit(IP_TUNNEL_CSUM_BIT, tun_flags);
744
break;
745
case OVS_TUNNEL_KEY_ATTR_TP_SRC:
746
SW_FLOW_KEY_PUT(match, tun_key.tp_src,
747
nla_get_be16(a), is_mask);
748
break;
749
case OVS_TUNNEL_KEY_ATTR_TP_DST:
750
SW_FLOW_KEY_PUT(match, tun_key.tp_dst,
751
nla_get_be16(a), is_mask);
752
break;
753
case OVS_TUNNEL_KEY_ATTR_OAM:
754
__set_bit(IP_TUNNEL_OAM_BIT, tun_flags);
755
break;
756
case OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS:
757
if (opts_type) {
758
OVS_NLERR(log, "Multiple metadata blocks provided");
759
return -EINVAL;
760
}
761
762
err = genev_tun_opt_from_nlattr(a, match, is_mask, log);
763
if (err)
764
return err;
765
766
__set_bit(IP_TUNNEL_GENEVE_OPT_BIT, tun_flags);
767
opts_type = type;
768
break;
769
case OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS:
770
if (opts_type) {
771
OVS_NLERR(log, "Multiple metadata blocks provided");
772
return -EINVAL;
773
}
774
775
err = vxlan_tun_opt_from_nlattr(a, match, is_mask, log);
776
if (err)
777
return err;
778
779
__set_bit(IP_TUNNEL_VXLAN_OPT_BIT, tun_flags);
780
opts_type = type;
781
break;
782
case OVS_TUNNEL_KEY_ATTR_PAD:
783
break;
784
case OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS:
785
if (opts_type) {
786
OVS_NLERR(log, "Multiple metadata blocks provided");
787
return -EINVAL;
788
}
789
790
err = erspan_tun_opt_from_nlattr(a, match, is_mask,
791
log);
792
if (err)
793
return err;
794
795
__set_bit(IP_TUNNEL_ERSPAN_OPT_BIT, tun_flags);
796
opts_type = type;
797
break;
798
case OVS_TUNNEL_KEY_ATTR_IPV4_INFO_BRIDGE:
799
info_bridge_mode = true;
800
ipv4 = true;
801
break;
802
default:
803
OVS_NLERR(log, "Unknown IP tunnel attribute %d",
804
type);
805
return -EINVAL;
806
}
807
}
808
809
SW_FLOW_KEY_BITMAP_COPY(match, tun_key.tun_flags, tun_flags,
810
__IP_TUNNEL_FLAG_NUM, is_mask);
811
if (is_mask)
812
SW_FLOW_KEY_MEMSET_FIELD(match, tun_proto, 0xff, true);
813
else
814
SW_FLOW_KEY_PUT(match, tun_proto, ipv6 ? AF_INET6 : AF_INET,
815
false);
816
817
if (rem > 0) {
818
OVS_NLERR(log, "IP tunnel attribute has %d unknown bytes.",
819
rem);
820
return -EINVAL;
821
}
822
823
if (ipv4 && ipv6) {
824
OVS_NLERR(log, "Mixed IPv4 and IPv6 tunnel attributes");
825
return -EINVAL;
826
}
827
828
if (!is_mask) {
829
if (!ipv4 && !ipv6) {
830
OVS_NLERR(log, "IP tunnel dst address not specified");
831
return -EINVAL;
832
}
833
if (ipv4) {
834
if (info_bridge_mode) {
835
__clear_bit(IP_TUNNEL_KEY_BIT, tun_flags);
836
837
if (match->key->tun_key.u.ipv4.src ||
838
match->key->tun_key.u.ipv4.dst ||
839
match->key->tun_key.tp_src ||
840
match->key->tun_key.tp_dst ||
841
match->key->tun_key.ttl ||
842
match->key->tun_key.tos ||
843
!ip_tunnel_flags_empty(tun_flags)) {
844
OVS_NLERR(log, "IPv4 tun info is not correct");
845
return -EINVAL;
846
}
847
} else if (!match->key->tun_key.u.ipv4.dst) {
848
OVS_NLERR(log, "IPv4 tunnel dst address is zero");
849
return -EINVAL;
850
}
851
}
852
if (ipv6 && ipv6_addr_any(&match->key->tun_key.u.ipv6.dst)) {
853
OVS_NLERR(log, "IPv6 tunnel dst address is zero");
854
return -EINVAL;
855
}
856
857
if (!ttl && !info_bridge_mode) {
858
OVS_NLERR(log, "IP tunnel TTL not specified.");
859
return -EINVAL;
860
}
861
}
862
863
return opts_type;
864
}
865
866
static int vxlan_opt_to_nlattr(struct sk_buff *skb,
867
const void *tun_opts, int swkey_tun_opts_len)
868
{
869
const struct vxlan_metadata *opts = tun_opts;
870
struct nlattr *nla;
871
872
nla = nla_nest_start_noflag(skb, OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS);
873
if (!nla)
874
return -EMSGSIZE;
875
876
if (nla_put_u32(skb, OVS_VXLAN_EXT_GBP, opts->gbp) < 0)
877
return -EMSGSIZE;
878
879
nla_nest_end(skb, nla);
880
return 0;
881
}
882
883
static int __ip_tun_to_nlattr(struct sk_buff *skb,
884
const struct ip_tunnel_key *output,
885
const void *tun_opts, int swkey_tun_opts_len,
886
unsigned short tun_proto, u8 mode)
887
{
888
if (test_bit(IP_TUNNEL_KEY_BIT, output->tun_flags) &&
889
nla_put_be64(skb, OVS_TUNNEL_KEY_ATTR_ID, output->tun_id,
890
OVS_TUNNEL_KEY_ATTR_PAD))
891
return -EMSGSIZE;
892
893
if (mode & IP_TUNNEL_INFO_BRIDGE)
894
return nla_put_flag(skb, OVS_TUNNEL_KEY_ATTR_IPV4_INFO_BRIDGE)
895
? -EMSGSIZE : 0;
896
897
switch (tun_proto) {
898
case AF_INET:
899
if (output->u.ipv4.src &&
900
nla_put_in_addr(skb, OVS_TUNNEL_KEY_ATTR_IPV4_SRC,
901
output->u.ipv4.src))
902
return -EMSGSIZE;
903
if (output->u.ipv4.dst &&
904
nla_put_in_addr(skb, OVS_TUNNEL_KEY_ATTR_IPV4_DST,
905
output->u.ipv4.dst))
906
return -EMSGSIZE;
907
break;
908
case AF_INET6:
909
if (!ipv6_addr_any(&output->u.ipv6.src) &&
910
nla_put_in6_addr(skb, OVS_TUNNEL_KEY_ATTR_IPV6_SRC,
911
&output->u.ipv6.src))
912
return -EMSGSIZE;
913
if (!ipv6_addr_any(&output->u.ipv6.dst) &&
914
nla_put_in6_addr(skb, OVS_TUNNEL_KEY_ATTR_IPV6_DST,
915
&output->u.ipv6.dst))
916
return -EMSGSIZE;
917
break;
918
}
919
if (output->tos &&
920
nla_put_u8(skb, OVS_TUNNEL_KEY_ATTR_TOS, output->tos))
921
return -EMSGSIZE;
922
if (nla_put_u8(skb, OVS_TUNNEL_KEY_ATTR_TTL, output->ttl))
923
return -EMSGSIZE;
924
if (test_bit(IP_TUNNEL_DONT_FRAGMENT_BIT, output->tun_flags) &&
925
nla_put_flag(skb, OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT))
926
return -EMSGSIZE;
927
if (test_bit(IP_TUNNEL_CSUM_BIT, output->tun_flags) &&
928
nla_put_flag(skb, OVS_TUNNEL_KEY_ATTR_CSUM))
929
return -EMSGSIZE;
930
if (output->tp_src &&
931
nla_put_be16(skb, OVS_TUNNEL_KEY_ATTR_TP_SRC, output->tp_src))
932
return -EMSGSIZE;
933
if (output->tp_dst &&
934
nla_put_be16(skb, OVS_TUNNEL_KEY_ATTR_TP_DST, output->tp_dst))
935
return -EMSGSIZE;
936
if (test_bit(IP_TUNNEL_OAM_BIT, output->tun_flags) &&
937
nla_put_flag(skb, OVS_TUNNEL_KEY_ATTR_OAM))
938
return -EMSGSIZE;
939
if (swkey_tun_opts_len) {
940
if (test_bit(IP_TUNNEL_GENEVE_OPT_BIT, output->tun_flags) &&
941
nla_put(skb, OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS,
942
swkey_tun_opts_len, tun_opts))
943
return -EMSGSIZE;
944
else if (test_bit(IP_TUNNEL_VXLAN_OPT_BIT,
945
output->tun_flags) &&
946
vxlan_opt_to_nlattr(skb, tun_opts, swkey_tun_opts_len))
947
return -EMSGSIZE;
948
else if (test_bit(IP_TUNNEL_ERSPAN_OPT_BIT,
949
output->tun_flags) &&
950
nla_put(skb, OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS,
951
swkey_tun_opts_len, tun_opts))
952
return -EMSGSIZE;
953
}
954
955
return 0;
956
}
957
958
static int ip_tun_to_nlattr(struct sk_buff *skb,
959
const struct ip_tunnel_key *output,
960
const void *tun_opts, int swkey_tun_opts_len,
961
unsigned short tun_proto, u8 mode)
962
{
963
struct nlattr *nla;
964
int err;
965
966
nla = nla_nest_start_noflag(skb, OVS_KEY_ATTR_TUNNEL);
967
if (!nla)
968
return -EMSGSIZE;
969
970
err = __ip_tun_to_nlattr(skb, output, tun_opts, swkey_tun_opts_len,
971
tun_proto, mode);
972
if (err)
973
return err;
974
975
nla_nest_end(skb, nla);
976
return 0;
977
}
978
979
int ovs_nla_put_tunnel_info(struct sk_buff *skb,
980
struct ip_tunnel_info *tun_info)
981
{
982
return __ip_tun_to_nlattr(skb, &tun_info->key,
983
ip_tunnel_info_opts(tun_info),
984
tun_info->options_len,
985
ip_tunnel_info_af(tun_info), tun_info->mode);
986
}
987
988
static int encode_vlan_from_nlattrs(struct sw_flow_match *match,
989
const struct nlattr *a[],
990
bool is_mask, bool inner)
991
{
992
__be16 tci = 0;
993
__be16 tpid = 0;
994
995
if (a[OVS_KEY_ATTR_VLAN])
996
tci = nla_get_be16(a[OVS_KEY_ATTR_VLAN]);
997
998
if (a[OVS_KEY_ATTR_ETHERTYPE])
999
tpid = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
1000
1001
if (likely(!inner)) {
1002
SW_FLOW_KEY_PUT(match, eth.vlan.tpid, tpid, is_mask);
1003
SW_FLOW_KEY_PUT(match, eth.vlan.tci, tci, is_mask);
1004
} else {
1005
SW_FLOW_KEY_PUT(match, eth.cvlan.tpid, tpid, is_mask);
1006
SW_FLOW_KEY_PUT(match, eth.cvlan.tci, tci, is_mask);
1007
}
1008
return 0;
1009
}
1010
1011
static int validate_vlan_from_nlattrs(const struct sw_flow_match *match,
1012
u64 key_attrs, bool inner,
1013
const struct nlattr **a, bool log)
1014
{
1015
__be16 tci = 0;
1016
1017
if (!((key_attrs & (1 << OVS_KEY_ATTR_ETHERNET)) &&
1018
(key_attrs & (1 << OVS_KEY_ATTR_ETHERTYPE)) &&
1019
eth_type_vlan(nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE])))) {
1020
/* Not a VLAN. */
1021
return 0;
1022
}
1023
1024
if (!((key_attrs & (1 << OVS_KEY_ATTR_VLAN)) &&
1025
(key_attrs & (1 << OVS_KEY_ATTR_ENCAP)))) {
1026
OVS_NLERR(log, "Invalid %s frame", (inner) ? "C-VLAN" : "VLAN");
1027
return -EINVAL;
1028
}
1029
1030
if (a[OVS_KEY_ATTR_VLAN])
1031
tci = nla_get_be16(a[OVS_KEY_ATTR_VLAN]);
1032
1033
if (!(tci & htons(VLAN_CFI_MASK))) {
1034
if (tci) {
1035
OVS_NLERR(log, "%s TCI does not have VLAN_CFI_MASK bit set.",
1036
(inner) ? "C-VLAN" : "VLAN");
1037
return -EINVAL;
1038
} else if (nla_len(a[OVS_KEY_ATTR_ENCAP])) {
1039
/* Corner case for truncated VLAN header. */
1040
OVS_NLERR(log, "Truncated %s header has non-zero encap attribute.",
1041
(inner) ? "C-VLAN" : "VLAN");
1042
return -EINVAL;
1043
}
1044
}
1045
1046
return 1;
1047
}
1048
1049
static int validate_vlan_mask_from_nlattrs(const struct sw_flow_match *match,
1050
u64 key_attrs, bool inner,
1051
const struct nlattr **a, bool log)
1052
{
1053
__be16 tci = 0;
1054
__be16 tpid = 0;
1055
bool encap_valid = !!(match->key->eth.vlan.tci &
1056
htons(VLAN_CFI_MASK));
1057
bool i_encap_valid = !!(match->key->eth.cvlan.tci &
1058
htons(VLAN_CFI_MASK));
1059
1060
if (!(key_attrs & (1 << OVS_KEY_ATTR_ENCAP))) {
1061
/* Not a VLAN. */
1062
return 0;
1063
}
1064
1065
if ((!inner && !encap_valid) || (inner && !i_encap_valid)) {
1066
OVS_NLERR(log, "Encap mask attribute is set for non-%s frame.",
1067
(inner) ? "C-VLAN" : "VLAN");
1068
return -EINVAL;
1069
}
1070
1071
if (a[OVS_KEY_ATTR_VLAN])
1072
tci = nla_get_be16(a[OVS_KEY_ATTR_VLAN]);
1073
1074
if (a[OVS_KEY_ATTR_ETHERTYPE])
1075
tpid = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
1076
1077
if (tpid != htons(0xffff)) {
1078
OVS_NLERR(log, "Must have an exact match on %s TPID (mask=%x).",
1079
(inner) ? "C-VLAN" : "VLAN", ntohs(tpid));
1080
return -EINVAL;
1081
}
1082
if (!(tci & htons(VLAN_CFI_MASK))) {
1083
OVS_NLERR(log, "%s TCI mask does not have exact match for VLAN_CFI_MASK bit.",
1084
(inner) ? "C-VLAN" : "VLAN");
1085
return -EINVAL;
1086
}
1087
1088
return 1;
1089
}
1090
1091
static int __parse_vlan_from_nlattrs(struct sw_flow_match *match,
1092
u64 *key_attrs, bool inner,
1093
const struct nlattr **a, bool is_mask,
1094
bool log)
1095
{
1096
int err;
1097
const struct nlattr *encap;
1098
1099
if (!is_mask)
1100
err = validate_vlan_from_nlattrs(match, *key_attrs, inner,
1101
a, log);
1102
else
1103
err = validate_vlan_mask_from_nlattrs(match, *key_attrs, inner,
1104
a, log);
1105
if (err <= 0)
1106
return err;
1107
1108
err = encode_vlan_from_nlattrs(match, a, is_mask, inner);
1109
if (err)
1110
return err;
1111
1112
*key_attrs &= ~(1 << OVS_KEY_ATTR_ENCAP);
1113
*key_attrs &= ~(1 << OVS_KEY_ATTR_VLAN);
1114
*key_attrs &= ~(1 << OVS_KEY_ATTR_ETHERTYPE);
1115
1116
encap = a[OVS_KEY_ATTR_ENCAP];
1117
1118
if (!is_mask)
1119
err = parse_flow_nlattrs(encap, a, key_attrs, log);
1120
else
1121
err = parse_flow_mask_nlattrs(encap, a, key_attrs, log);
1122
1123
return err;
1124
}
1125
1126
static int parse_vlan_from_nlattrs(struct sw_flow_match *match,
1127
u64 *key_attrs, const struct nlattr **a,
1128
bool is_mask, bool log)
1129
{
1130
int err;
1131
bool encap_valid = false;
1132
1133
err = __parse_vlan_from_nlattrs(match, key_attrs, false, a,
1134
is_mask, log);
1135
if (err)
1136
return err;
1137
1138
encap_valid = !!(match->key->eth.vlan.tci & htons(VLAN_CFI_MASK));
1139
if (encap_valid) {
1140
err = __parse_vlan_from_nlattrs(match, key_attrs, true, a,
1141
is_mask, log);
1142
if (err)
1143
return err;
1144
}
1145
1146
return 0;
1147
}
1148
1149
static int parse_eth_type_from_nlattrs(struct sw_flow_match *match,
1150
u64 *attrs, const struct nlattr **a,
1151
bool is_mask, bool log)
1152
{
1153
__be16 eth_type;
1154
1155
eth_type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
1156
if (is_mask) {
1157
/* Always exact match EtherType. */
1158
eth_type = htons(0xffff);
1159
} else if (!eth_proto_is_802_3(eth_type)) {
1160
OVS_NLERR(log, "EtherType %x is less than min %x",
1161
ntohs(eth_type), ETH_P_802_3_MIN);
1162
return -EINVAL;
1163
}
1164
1165
SW_FLOW_KEY_PUT(match, eth.type, eth_type, is_mask);
1166
*attrs &= ~(1 << OVS_KEY_ATTR_ETHERTYPE);
1167
return 0;
1168
}
1169
1170
static int metadata_from_nlattrs(struct net *net, struct sw_flow_match *match,
1171
u64 *attrs, const struct nlattr **a,
1172
bool is_mask, bool log)
1173
{
1174
u8 mac_proto = MAC_PROTO_ETHERNET;
1175
1176
if (*attrs & (1 << OVS_KEY_ATTR_DP_HASH)) {
1177
u32 hash_val = nla_get_u32(a[OVS_KEY_ATTR_DP_HASH]);
1178
1179
SW_FLOW_KEY_PUT(match, ovs_flow_hash, hash_val, is_mask);
1180
*attrs &= ~(1 << OVS_KEY_ATTR_DP_HASH);
1181
}
1182
1183
if (*attrs & (1 << OVS_KEY_ATTR_RECIRC_ID)) {
1184
u32 recirc_id = nla_get_u32(a[OVS_KEY_ATTR_RECIRC_ID]);
1185
1186
SW_FLOW_KEY_PUT(match, recirc_id, recirc_id, is_mask);
1187
*attrs &= ~(1 << OVS_KEY_ATTR_RECIRC_ID);
1188
}
1189
1190
if (*attrs & (1 << OVS_KEY_ATTR_PRIORITY)) {
1191
SW_FLOW_KEY_PUT(match, phy.priority,
1192
nla_get_u32(a[OVS_KEY_ATTR_PRIORITY]), is_mask);
1193
*attrs &= ~(1 << OVS_KEY_ATTR_PRIORITY);
1194
}
1195
1196
if (*attrs & (1 << OVS_KEY_ATTR_IN_PORT)) {
1197
u32 in_port = nla_get_u32(a[OVS_KEY_ATTR_IN_PORT]);
1198
1199
if (is_mask) {
1200
in_port = 0xffffffff; /* Always exact match in_port. */
1201
} else if (in_port >= DP_MAX_PORTS) {
1202
OVS_NLERR(log, "Port %d exceeds max allowable %d",
1203
in_port, DP_MAX_PORTS);
1204
return -EINVAL;
1205
}
1206
1207
SW_FLOW_KEY_PUT(match, phy.in_port, in_port, is_mask);
1208
*attrs &= ~(1 << OVS_KEY_ATTR_IN_PORT);
1209
} else if (!is_mask) {
1210
SW_FLOW_KEY_PUT(match, phy.in_port, DP_MAX_PORTS, is_mask);
1211
}
1212
1213
if (*attrs & (1 << OVS_KEY_ATTR_SKB_MARK)) {
1214
uint32_t mark = nla_get_u32(a[OVS_KEY_ATTR_SKB_MARK]);
1215
1216
SW_FLOW_KEY_PUT(match, phy.skb_mark, mark, is_mask);
1217
*attrs &= ~(1 << OVS_KEY_ATTR_SKB_MARK);
1218
}
1219
if (*attrs & (1 << OVS_KEY_ATTR_TUNNEL)) {
1220
if (ip_tun_from_nlattr(a[OVS_KEY_ATTR_TUNNEL], match,
1221
is_mask, log) < 0)
1222
return -EINVAL;
1223
*attrs &= ~(1 << OVS_KEY_ATTR_TUNNEL);
1224
}
1225
1226
if (*attrs & (1 << OVS_KEY_ATTR_CT_STATE) &&
1227
ovs_ct_verify(net, OVS_KEY_ATTR_CT_STATE)) {
1228
u32 ct_state = nla_get_u32(a[OVS_KEY_ATTR_CT_STATE]);
1229
1230
if (ct_state & ~CT_SUPPORTED_MASK) {
1231
OVS_NLERR(log, "ct_state flags %08x unsupported",
1232
ct_state);
1233
return -EINVAL;
1234
}
1235
1236
SW_FLOW_KEY_PUT(match, ct_state, ct_state, is_mask);
1237
*attrs &= ~(1ULL << OVS_KEY_ATTR_CT_STATE);
1238
}
1239
if (*attrs & (1 << OVS_KEY_ATTR_CT_ZONE) &&
1240
ovs_ct_verify(net, OVS_KEY_ATTR_CT_ZONE)) {
1241
u16 ct_zone = nla_get_u16(a[OVS_KEY_ATTR_CT_ZONE]);
1242
1243
SW_FLOW_KEY_PUT(match, ct_zone, ct_zone, is_mask);
1244
*attrs &= ~(1ULL << OVS_KEY_ATTR_CT_ZONE);
1245
}
1246
if (*attrs & (1 << OVS_KEY_ATTR_CT_MARK) &&
1247
ovs_ct_verify(net, OVS_KEY_ATTR_CT_MARK)) {
1248
u32 mark = nla_get_u32(a[OVS_KEY_ATTR_CT_MARK]);
1249
1250
SW_FLOW_KEY_PUT(match, ct.mark, mark, is_mask);
1251
*attrs &= ~(1ULL << OVS_KEY_ATTR_CT_MARK);
1252
}
1253
if (*attrs & (1 << OVS_KEY_ATTR_CT_LABELS) &&
1254
ovs_ct_verify(net, OVS_KEY_ATTR_CT_LABELS)) {
1255
const struct ovs_key_ct_labels *cl;
1256
1257
cl = nla_data(a[OVS_KEY_ATTR_CT_LABELS]);
1258
SW_FLOW_KEY_MEMCPY(match, ct.labels, cl->ct_labels,
1259
sizeof(*cl), is_mask);
1260
*attrs &= ~(1ULL << OVS_KEY_ATTR_CT_LABELS);
1261
}
1262
if (*attrs & (1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4)) {
1263
const struct ovs_key_ct_tuple_ipv4 *ct;
1264
1265
ct = nla_data(a[OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4]);
1266
1267
SW_FLOW_KEY_PUT(match, ipv4.ct_orig.src, ct->ipv4_src, is_mask);
1268
SW_FLOW_KEY_PUT(match, ipv4.ct_orig.dst, ct->ipv4_dst, is_mask);
1269
SW_FLOW_KEY_PUT(match, ct.orig_tp.src, ct->src_port, is_mask);
1270
SW_FLOW_KEY_PUT(match, ct.orig_tp.dst, ct->dst_port, is_mask);
1271
SW_FLOW_KEY_PUT(match, ct_orig_proto, ct->ipv4_proto, is_mask);
1272
*attrs &= ~(1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4);
1273
}
1274
if (*attrs & (1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6)) {
1275
const struct ovs_key_ct_tuple_ipv6 *ct;
1276
1277
ct = nla_data(a[OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6]);
1278
1279
SW_FLOW_KEY_MEMCPY(match, ipv6.ct_orig.src, &ct->ipv6_src,
1280
sizeof(match->key->ipv6.ct_orig.src),
1281
is_mask);
1282
SW_FLOW_KEY_MEMCPY(match, ipv6.ct_orig.dst, &ct->ipv6_dst,
1283
sizeof(match->key->ipv6.ct_orig.dst),
1284
is_mask);
1285
SW_FLOW_KEY_PUT(match, ct.orig_tp.src, ct->src_port, is_mask);
1286
SW_FLOW_KEY_PUT(match, ct.orig_tp.dst, ct->dst_port, is_mask);
1287
SW_FLOW_KEY_PUT(match, ct_orig_proto, ct->ipv6_proto, is_mask);
1288
*attrs &= ~(1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6);
1289
}
1290
1291
/* For layer 3 packets the Ethernet type is provided
1292
* and treated as metadata but no MAC addresses are provided.
1293
*/
1294
if (!(*attrs & (1ULL << OVS_KEY_ATTR_ETHERNET)) &&
1295
(*attrs & (1ULL << OVS_KEY_ATTR_ETHERTYPE)))
1296
mac_proto = MAC_PROTO_NONE;
1297
1298
/* Always exact match mac_proto */
1299
SW_FLOW_KEY_PUT(match, mac_proto, is_mask ? 0xff : mac_proto, is_mask);
1300
1301
if (mac_proto == MAC_PROTO_NONE)
1302
return parse_eth_type_from_nlattrs(match, attrs, a, is_mask,
1303
log);
1304
1305
return 0;
1306
}
1307
1308
/*
1309
* Constructs NSH header 'nh' from attributes of OVS_ACTION_ATTR_PUSH_NSH,
1310
* where 'nh' points to a memory block of 'size' bytes. It's assumed that
1311
* attributes were previously validated with validate_push_nsh().
1312
*/
1313
int nsh_hdr_from_nlattr(const struct nlattr *attr,
1314
struct nshhdr *nh, size_t size)
1315
{
1316
struct nlattr *a;
1317
int rem;
1318
u8 flags = 0;
1319
u8 ttl = 0;
1320
int mdlen = 0;
1321
1322
if (size < NSH_BASE_HDR_LEN)
1323
return -ENOBUFS;
1324
1325
nla_for_each_nested(a, attr, rem) {
1326
int type = nla_type(a);
1327
1328
switch (type) {
1329
case OVS_NSH_KEY_ATTR_BASE: {
1330
const struct ovs_nsh_key_base *base = nla_data(a);
1331
1332
flags = base->flags;
1333
ttl = base->ttl;
1334
nh->np = base->np;
1335
nh->mdtype = base->mdtype;
1336
nh->path_hdr = base->path_hdr;
1337
break;
1338
}
1339
case OVS_NSH_KEY_ATTR_MD1:
1340
mdlen = nla_len(a);
1341
if (mdlen > size - NSH_BASE_HDR_LEN)
1342
return -ENOBUFS;
1343
memcpy(&nh->md1, nla_data(a), mdlen);
1344
break;
1345
1346
case OVS_NSH_KEY_ATTR_MD2:
1347
mdlen = nla_len(a);
1348
if (mdlen > size - NSH_BASE_HDR_LEN)
1349
return -ENOBUFS;
1350
memcpy(&nh->md2, nla_data(a), mdlen);
1351
break;
1352
1353
default:
1354
return -EINVAL;
1355
}
1356
}
1357
1358
/* nsh header length = NSH_BASE_HDR_LEN + mdlen */
1359
nh->ver_flags_ttl_len = 0;
1360
nsh_set_flags_ttl_len(nh, flags, ttl, NSH_BASE_HDR_LEN + mdlen);
1361
1362
return 0;
1363
}
1364
1365
static int nsh_key_put_from_nlattr(const struct nlattr *attr,
1366
struct sw_flow_match *match, bool is_mask,
1367
bool is_push_nsh, bool log)
1368
{
1369
struct nlattr *a;
1370
int rem;
1371
bool has_base = false;
1372
bool has_md1 = false;
1373
bool has_md2 = false;
1374
u8 mdtype = 0;
1375
int mdlen = 0;
1376
1377
if (WARN_ON(is_push_nsh && is_mask))
1378
return -EINVAL;
1379
1380
nla_for_each_nested(a, attr, rem) {
1381
int type = nla_type(a);
1382
int i;
1383
1384
if (type > OVS_NSH_KEY_ATTR_MAX) {
1385
OVS_NLERR(log, "nsh attr %d is out of range max %d",
1386
type, OVS_NSH_KEY_ATTR_MAX);
1387
return -EINVAL;
1388
}
1389
1390
if (!check_attr_len(nla_len(a),
1391
ovs_nsh_key_attr_lens[type].len)) {
1392
OVS_NLERR(
1393
log,
1394
"nsh attr %d has unexpected len %d expected %d",
1395
type,
1396
nla_len(a),
1397
ovs_nsh_key_attr_lens[type].len
1398
);
1399
return -EINVAL;
1400
}
1401
1402
switch (type) {
1403
case OVS_NSH_KEY_ATTR_BASE: {
1404
const struct ovs_nsh_key_base *base = nla_data(a);
1405
1406
has_base = true;
1407
mdtype = base->mdtype;
1408
SW_FLOW_KEY_PUT(match, nsh.base.flags,
1409
base->flags, is_mask);
1410
SW_FLOW_KEY_PUT(match, nsh.base.ttl,
1411
base->ttl, is_mask);
1412
SW_FLOW_KEY_PUT(match, nsh.base.mdtype,
1413
base->mdtype, is_mask);
1414
SW_FLOW_KEY_PUT(match, nsh.base.np,
1415
base->np, is_mask);
1416
SW_FLOW_KEY_PUT(match, nsh.base.path_hdr,
1417
base->path_hdr, is_mask);
1418
break;
1419
}
1420
case OVS_NSH_KEY_ATTR_MD1: {
1421
const struct ovs_nsh_key_md1 *md1 = nla_data(a);
1422
1423
has_md1 = true;
1424
for (i = 0; i < NSH_MD1_CONTEXT_SIZE; i++)
1425
SW_FLOW_KEY_PUT(match, nsh.context[i],
1426
md1->context[i], is_mask);
1427
break;
1428
}
1429
case OVS_NSH_KEY_ATTR_MD2:
1430
if (!is_push_nsh) /* Not supported MD type 2 yet */
1431
return -ENOTSUPP;
1432
1433
has_md2 = true;
1434
mdlen = nla_len(a);
1435
if (mdlen > NSH_CTX_HDRS_MAX_LEN || mdlen <= 0) {
1436
OVS_NLERR(
1437
log,
1438
"Invalid MD length %d for MD type %d",
1439
mdlen,
1440
mdtype
1441
);
1442
return -EINVAL;
1443
}
1444
break;
1445
default:
1446
OVS_NLERR(log, "Unknown nsh attribute %d",
1447
type);
1448
return -EINVAL;
1449
}
1450
}
1451
1452
if (rem > 0) {
1453
OVS_NLERR(log, "nsh attribute has %d unknown bytes.", rem);
1454
return -EINVAL;
1455
}
1456
1457
if (has_md1 && has_md2) {
1458
OVS_NLERR(
1459
1,
1460
"invalid nsh attribute: md1 and md2 are exclusive."
1461
);
1462
return -EINVAL;
1463
}
1464
1465
if (!is_mask) {
1466
if ((has_md1 && mdtype != NSH_M_TYPE1) ||
1467
(has_md2 && mdtype != NSH_M_TYPE2)) {
1468
OVS_NLERR(1, "nsh attribute has unmatched MD type %d.",
1469
mdtype);
1470
return -EINVAL;
1471
}
1472
1473
if (is_push_nsh &&
1474
(!has_base || (!has_md1 && !has_md2))) {
1475
OVS_NLERR(
1476
1,
1477
"push_nsh: missing base or metadata attributes"
1478
);
1479
return -EINVAL;
1480
}
1481
}
1482
1483
return 0;
1484
}
1485
1486
static int ovs_key_from_nlattrs(struct net *net, struct sw_flow_match *match,
1487
u64 attrs, const struct nlattr **a,
1488
bool is_mask, bool log)
1489
{
1490
int err;
1491
1492
err = metadata_from_nlattrs(net, match, &attrs, a, is_mask, log);
1493
if (err)
1494
return err;
1495
1496
if (attrs & (1 << OVS_KEY_ATTR_ETHERNET)) {
1497
const struct ovs_key_ethernet *eth_key;
1498
1499
eth_key = nla_data(a[OVS_KEY_ATTR_ETHERNET]);
1500
SW_FLOW_KEY_MEMCPY(match, eth.src,
1501
eth_key->eth_src, ETH_ALEN, is_mask);
1502
SW_FLOW_KEY_MEMCPY(match, eth.dst,
1503
eth_key->eth_dst, ETH_ALEN, is_mask);
1504
attrs &= ~(1 << OVS_KEY_ATTR_ETHERNET);
1505
1506
if (attrs & (1 << OVS_KEY_ATTR_VLAN)) {
1507
/* VLAN attribute is always parsed before getting here since it
1508
* may occur multiple times.
1509
*/
1510
OVS_NLERR(log, "VLAN attribute unexpected.");
1511
return -EINVAL;
1512
}
1513
1514
if (attrs & (1 << OVS_KEY_ATTR_ETHERTYPE)) {
1515
err = parse_eth_type_from_nlattrs(match, &attrs, a, is_mask,
1516
log);
1517
if (err)
1518
return err;
1519
} else if (!is_mask) {
1520
SW_FLOW_KEY_PUT(match, eth.type, htons(ETH_P_802_2), is_mask);
1521
}
1522
} else if (!match->key->eth.type) {
1523
OVS_NLERR(log, "Either Ethernet header or EtherType is required.");
1524
return -EINVAL;
1525
}
1526
1527
if (attrs & (1 << OVS_KEY_ATTR_IPV4)) {
1528
const struct ovs_key_ipv4 *ipv4_key;
1529
1530
ipv4_key = nla_data(a[OVS_KEY_ATTR_IPV4]);
1531
if (!is_mask && ipv4_key->ipv4_frag > OVS_FRAG_TYPE_MAX) {
1532
OVS_NLERR(log, "IPv4 frag type %d is out of range max %d",
1533
ipv4_key->ipv4_frag, OVS_FRAG_TYPE_MAX);
1534
return -EINVAL;
1535
}
1536
SW_FLOW_KEY_PUT(match, ip.proto,
1537
ipv4_key->ipv4_proto, is_mask);
1538
SW_FLOW_KEY_PUT(match, ip.tos,
1539
ipv4_key->ipv4_tos, is_mask);
1540
SW_FLOW_KEY_PUT(match, ip.ttl,
1541
ipv4_key->ipv4_ttl, is_mask);
1542
SW_FLOW_KEY_PUT(match, ip.frag,
1543
ipv4_key->ipv4_frag, is_mask);
1544
SW_FLOW_KEY_PUT(match, ipv4.addr.src,
1545
ipv4_key->ipv4_src, is_mask);
1546
SW_FLOW_KEY_PUT(match, ipv4.addr.dst,
1547
ipv4_key->ipv4_dst, is_mask);
1548
attrs &= ~(1 << OVS_KEY_ATTR_IPV4);
1549
}
1550
1551
if (attrs & (1 << OVS_KEY_ATTR_IPV6)) {
1552
const struct ovs_key_ipv6 *ipv6_key;
1553
1554
ipv6_key = nla_data(a[OVS_KEY_ATTR_IPV6]);
1555
if (!is_mask && ipv6_key->ipv6_frag > OVS_FRAG_TYPE_MAX) {
1556
OVS_NLERR(log, "IPv6 frag type %d is out of range max %d",
1557
ipv6_key->ipv6_frag, OVS_FRAG_TYPE_MAX);
1558
return -EINVAL;
1559
}
1560
1561
if (!is_mask && ipv6_key->ipv6_label & htonl(0xFFF00000)) {
1562
OVS_NLERR(log, "IPv6 flow label %x is out of range (max=%x)",
1563
ntohl(ipv6_key->ipv6_label), (1 << 20) - 1);
1564
return -EINVAL;
1565
}
1566
1567
SW_FLOW_KEY_PUT(match, ipv6.label,
1568
ipv6_key->ipv6_label, is_mask);
1569
SW_FLOW_KEY_PUT(match, ip.proto,
1570
ipv6_key->ipv6_proto, is_mask);
1571
SW_FLOW_KEY_PUT(match, ip.tos,
1572
ipv6_key->ipv6_tclass, is_mask);
1573
SW_FLOW_KEY_PUT(match, ip.ttl,
1574
ipv6_key->ipv6_hlimit, is_mask);
1575
SW_FLOW_KEY_PUT(match, ip.frag,
1576
ipv6_key->ipv6_frag, is_mask);
1577
SW_FLOW_KEY_MEMCPY(match, ipv6.addr.src,
1578
ipv6_key->ipv6_src,
1579
sizeof(match->key->ipv6.addr.src),
1580
is_mask);
1581
SW_FLOW_KEY_MEMCPY(match, ipv6.addr.dst,
1582
ipv6_key->ipv6_dst,
1583
sizeof(match->key->ipv6.addr.dst),
1584
is_mask);
1585
1586
attrs &= ~(1 << OVS_KEY_ATTR_IPV6);
1587
}
1588
1589
if (attrs & (1ULL << OVS_KEY_ATTR_IPV6_EXTHDRS)) {
1590
const struct ovs_key_ipv6_exthdrs *ipv6_exthdrs_key;
1591
1592
ipv6_exthdrs_key = nla_data(a[OVS_KEY_ATTR_IPV6_EXTHDRS]);
1593
1594
SW_FLOW_KEY_PUT(match, ipv6.exthdrs,
1595
ipv6_exthdrs_key->hdrs, is_mask);
1596
1597
attrs &= ~(1ULL << OVS_KEY_ATTR_IPV6_EXTHDRS);
1598
}
1599
1600
if (attrs & (1 << OVS_KEY_ATTR_ARP)) {
1601
const struct ovs_key_arp *arp_key;
1602
1603
arp_key = nla_data(a[OVS_KEY_ATTR_ARP]);
1604
if (!is_mask && (arp_key->arp_op & htons(0xff00))) {
1605
OVS_NLERR(log, "Unknown ARP opcode (opcode=%d).",
1606
arp_key->arp_op);
1607
return -EINVAL;
1608
}
1609
1610
SW_FLOW_KEY_PUT(match, ipv4.addr.src,
1611
arp_key->arp_sip, is_mask);
1612
SW_FLOW_KEY_PUT(match, ipv4.addr.dst,
1613
arp_key->arp_tip, is_mask);
1614
SW_FLOW_KEY_PUT(match, ip.proto,
1615
ntohs(arp_key->arp_op), is_mask);
1616
SW_FLOW_KEY_MEMCPY(match, ipv4.arp.sha,
1617
arp_key->arp_sha, ETH_ALEN, is_mask);
1618
SW_FLOW_KEY_MEMCPY(match, ipv4.arp.tha,
1619
arp_key->arp_tha, ETH_ALEN, is_mask);
1620
1621
attrs &= ~(1 << OVS_KEY_ATTR_ARP);
1622
}
1623
1624
if (attrs & (1 << OVS_KEY_ATTR_NSH)) {
1625
if (nsh_key_put_from_nlattr(a[OVS_KEY_ATTR_NSH], match,
1626
is_mask, false, log) < 0)
1627
return -EINVAL;
1628
attrs &= ~(1 << OVS_KEY_ATTR_NSH);
1629
}
1630
1631
if (attrs & (1 << OVS_KEY_ATTR_MPLS)) {
1632
const struct ovs_key_mpls *mpls_key;
1633
u32 hdr_len;
1634
u32 label_count, label_count_mask, i;
1635
1636
mpls_key = nla_data(a[OVS_KEY_ATTR_MPLS]);
1637
hdr_len = nla_len(a[OVS_KEY_ATTR_MPLS]);
1638
label_count = hdr_len / sizeof(struct ovs_key_mpls);
1639
1640
if (label_count == 0 || label_count > MPLS_LABEL_DEPTH ||
1641
hdr_len % sizeof(struct ovs_key_mpls))
1642
return -EINVAL;
1643
1644
label_count_mask = GENMASK(label_count - 1, 0);
1645
1646
for (i = 0 ; i < label_count; i++)
1647
SW_FLOW_KEY_PUT(match, mpls.lse[i],
1648
mpls_key[i].mpls_lse, is_mask);
1649
1650
SW_FLOW_KEY_PUT(match, mpls.num_labels_mask,
1651
label_count_mask, is_mask);
1652
1653
attrs &= ~(1 << OVS_KEY_ATTR_MPLS);
1654
}
1655
1656
if (attrs & (1 << OVS_KEY_ATTR_TCP)) {
1657
const struct ovs_key_tcp *tcp_key;
1658
1659
tcp_key = nla_data(a[OVS_KEY_ATTR_TCP]);
1660
SW_FLOW_KEY_PUT(match, tp.src, tcp_key->tcp_src, is_mask);
1661
SW_FLOW_KEY_PUT(match, tp.dst, tcp_key->tcp_dst, is_mask);
1662
attrs &= ~(1 << OVS_KEY_ATTR_TCP);
1663
}
1664
1665
if (attrs & (1 << OVS_KEY_ATTR_TCP_FLAGS)) {
1666
SW_FLOW_KEY_PUT(match, tp.flags,
1667
nla_get_be16(a[OVS_KEY_ATTR_TCP_FLAGS]),
1668
is_mask);
1669
attrs &= ~(1 << OVS_KEY_ATTR_TCP_FLAGS);
1670
}
1671
1672
if (attrs & (1 << OVS_KEY_ATTR_UDP)) {
1673
const struct ovs_key_udp *udp_key;
1674
1675
udp_key = nla_data(a[OVS_KEY_ATTR_UDP]);
1676
SW_FLOW_KEY_PUT(match, tp.src, udp_key->udp_src, is_mask);
1677
SW_FLOW_KEY_PUT(match, tp.dst, udp_key->udp_dst, is_mask);
1678
attrs &= ~(1 << OVS_KEY_ATTR_UDP);
1679
}
1680
1681
if (attrs & (1 << OVS_KEY_ATTR_SCTP)) {
1682
const struct ovs_key_sctp *sctp_key;
1683
1684
sctp_key = nla_data(a[OVS_KEY_ATTR_SCTP]);
1685
SW_FLOW_KEY_PUT(match, tp.src, sctp_key->sctp_src, is_mask);
1686
SW_FLOW_KEY_PUT(match, tp.dst, sctp_key->sctp_dst, is_mask);
1687
attrs &= ~(1 << OVS_KEY_ATTR_SCTP);
1688
}
1689
1690
if (attrs & (1 << OVS_KEY_ATTR_ICMP)) {
1691
const struct ovs_key_icmp *icmp_key;
1692
1693
icmp_key = nla_data(a[OVS_KEY_ATTR_ICMP]);
1694
SW_FLOW_KEY_PUT(match, tp.src,
1695
htons(icmp_key->icmp_type), is_mask);
1696
SW_FLOW_KEY_PUT(match, tp.dst,
1697
htons(icmp_key->icmp_code), is_mask);
1698
attrs &= ~(1 << OVS_KEY_ATTR_ICMP);
1699
}
1700
1701
if (attrs & (1 << OVS_KEY_ATTR_ICMPV6)) {
1702
const struct ovs_key_icmpv6 *icmpv6_key;
1703
1704
icmpv6_key = nla_data(a[OVS_KEY_ATTR_ICMPV6]);
1705
SW_FLOW_KEY_PUT(match, tp.src,
1706
htons(icmpv6_key->icmpv6_type), is_mask);
1707
SW_FLOW_KEY_PUT(match, tp.dst,
1708
htons(icmpv6_key->icmpv6_code), is_mask);
1709
attrs &= ~(1 << OVS_KEY_ATTR_ICMPV6);
1710
}
1711
1712
if (attrs & (1 << OVS_KEY_ATTR_ND)) {
1713
const struct ovs_key_nd *nd_key;
1714
1715
nd_key = nla_data(a[OVS_KEY_ATTR_ND]);
1716
SW_FLOW_KEY_MEMCPY(match, ipv6.nd.target,
1717
nd_key->nd_target,
1718
sizeof(match->key->ipv6.nd.target),
1719
is_mask);
1720
SW_FLOW_KEY_MEMCPY(match, ipv6.nd.sll,
1721
nd_key->nd_sll, ETH_ALEN, is_mask);
1722
SW_FLOW_KEY_MEMCPY(match, ipv6.nd.tll,
1723
nd_key->nd_tll, ETH_ALEN, is_mask);
1724
attrs &= ~(1 << OVS_KEY_ATTR_ND);
1725
}
1726
1727
if (attrs != 0) {
1728
OVS_NLERR(log, "Unknown key attributes %llx",
1729
(unsigned long long)attrs);
1730
return -EINVAL;
1731
}
1732
1733
return 0;
1734
}
1735
1736
static void nlattr_set(struct nlattr *attr, u8 val,
1737
const struct ovs_len_tbl *tbl)
1738
{
1739
struct nlattr *nla;
1740
int rem;
1741
1742
/* The nlattr stream should already have been validated */
1743
nla_for_each_nested(nla, attr, rem) {
1744
if (tbl[nla_type(nla)].len == OVS_ATTR_NESTED)
1745
nlattr_set(nla, val, tbl[nla_type(nla)].next ? : tbl);
1746
else
1747
memset(nla_data(nla), val, nla_len(nla));
1748
1749
if (nla_type(nla) == OVS_KEY_ATTR_CT_STATE)
1750
*(u32 *)nla_data(nla) &= CT_SUPPORTED_MASK;
1751
}
1752
}
1753
1754
static void mask_set_nlattr(struct nlattr *attr, u8 val)
1755
{
1756
nlattr_set(attr, val, ovs_key_lens);
1757
}
1758
1759
/**
1760
* ovs_nla_get_match - parses Netlink attributes into a flow key and
1761
* mask. In case the 'mask' is NULL, the flow is treated as exact match
1762
* flow. Otherwise, it is treated as a wildcarded flow, except the mask
1763
* does not include any don't care bit.
1764
* @net: Used to determine per-namespace field support.
1765
* @match: receives the extracted flow match information.
1766
* @nla_key: Netlink attribute holding nested %OVS_KEY_ATTR_* Netlink attribute
1767
* sequence. The fields should of the packet that triggered the creation
1768
* of this flow.
1769
* @nla_mask: Optional. Netlink attribute holding nested %OVS_KEY_ATTR_*
1770
* Netlink attribute specifies the mask field of the wildcarded flow.
1771
* @log: Boolean to allow kernel error logging. Normally true, but when
1772
* probing for feature compatibility this should be passed in as false to
1773
* suppress unnecessary error logging.
1774
*/
1775
int ovs_nla_get_match(struct net *net, struct sw_flow_match *match,
1776
const struct nlattr *nla_key,
1777
const struct nlattr *nla_mask,
1778
bool log)
1779
{
1780
const struct nlattr *a[OVS_KEY_ATTR_MAX + 1];
1781
struct nlattr *newmask = NULL;
1782
u64 key_attrs = 0;
1783
u64 mask_attrs = 0;
1784
int err;
1785
1786
err = parse_flow_nlattrs(nla_key, a, &key_attrs, log);
1787
if (err)
1788
return err;
1789
1790
err = parse_vlan_from_nlattrs(match, &key_attrs, a, false, log);
1791
if (err)
1792
return err;
1793
1794
err = ovs_key_from_nlattrs(net, match, key_attrs, a, false, log);
1795
if (err)
1796
return err;
1797
1798
if (match->mask) {
1799
if (!nla_mask) {
1800
/* Create an exact match mask. We need to set to 0xff
1801
* all the 'match->mask' fields that have been touched
1802
* in 'match->key'. We cannot simply memset
1803
* 'match->mask', because padding bytes and fields not
1804
* specified in 'match->key' should be left to 0.
1805
* Instead, we use a stream of netlink attributes,
1806
* copied from 'key' and set to 0xff.
1807
* ovs_key_from_nlattrs() will take care of filling
1808
* 'match->mask' appropriately.
1809
*/
1810
newmask = kmemdup(nla_key,
1811
nla_total_size(nla_len(nla_key)),
1812
GFP_KERNEL);
1813
if (!newmask)
1814
return -ENOMEM;
1815
1816
mask_set_nlattr(newmask, 0xff);
1817
1818
/* The userspace does not send tunnel attributes that
1819
* are 0, but we should not wildcard them nonetheless.
1820
*/
1821
if (match->key->tun_proto)
1822
SW_FLOW_KEY_MEMSET_FIELD(match, tun_key,
1823
0xff, true);
1824
1825
nla_mask = newmask;
1826
}
1827
1828
err = parse_flow_mask_nlattrs(nla_mask, a, &mask_attrs, log);
1829
if (err)
1830
goto free_newmask;
1831
1832
/* Always match on tci. */
1833
SW_FLOW_KEY_PUT(match, eth.vlan.tci, htons(0xffff), true);
1834
SW_FLOW_KEY_PUT(match, eth.cvlan.tci, htons(0xffff), true);
1835
1836
err = parse_vlan_from_nlattrs(match, &mask_attrs, a, true, log);
1837
if (err)
1838
goto free_newmask;
1839
1840
err = ovs_key_from_nlattrs(net, match, mask_attrs, a, true,
1841
log);
1842
if (err)
1843
goto free_newmask;
1844
}
1845
1846
if (!match_validate(match, key_attrs, mask_attrs, log))
1847
err = -EINVAL;
1848
1849
free_newmask:
1850
kfree(newmask);
1851
return err;
1852
}
1853
1854
static size_t get_ufid_len(const struct nlattr *attr, bool log)
1855
{
1856
size_t len;
1857
1858
if (!attr)
1859
return 0;
1860
1861
len = nla_len(attr);
1862
if (len < 1 || len > MAX_UFID_LENGTH) {
1863
OVS_NLERR(log, "ufid size %u bytes exceeds the range (1, %d)",
1864
nla_len(attr), MAX_UFID_LENGTH);
1865
return 0;
1866
}
1867
1868
return len;
1869
}
1870
1871
/* Initializes 'flow->ufid', returning true if 'attr' contains a valid UFID,
1872
* or false otherwise.
1873
*/
1874
bool ovs_nla_get_ufid(struct sw_flow_id *sfid, const struct nlattr *attr,
1875
bool log)
1876
{
1877
sfid->ufid_len = get_ufid_len(attr, log);
1878
if (sfid->ufid_len)
1879
memcpy(sfid->ufid, nla_data(attr), sfid->ufid_len);
1880
1881
return sfid->ufid_len;
1882
}
1883
1884
int ovs_nla_get_identifier(struct sw_flow_id *sfid, const struct nlattr *ufid,
1885
const struct sw_flow_key *key, bool log)
1886
{
1887
struct sw_flow_key *new_key;
1888
1889
if (ovs_nla_get_ufid(sfid, ufid, log))
1890
return 0;
1891
1892
/* If UFID was not provided, use unmasked key. */
1893
new_key = kmalloc_obj(*new_key);
1894
if (!new_key)
1895
return -ENOMEM;
1896
memcpy(new_key, key, sizeof(*key));
1897
sfid->unmasked_key = new_key;
1898
1899
return 0;
1900
}
1901
1902
u32 ovs_nla_get_ufid_flags(const struct nlattr *attr)
1903
{
1904
return nla_get_u32_default(attr, 0);
1905
}
1906
1907
/**
1908
* ovs_nla_get_flow_metadata - parses Netlink attributes into a flow key.
1909
* @net: Network namespace.
1910
* @key: Receives extracted in_port, priority, tun_key, skb_mark and conntrack
1911
* metadata.
1912
* @a: Array of netlink attributes holding parsed %OVS_KEY_ATTR_* Netlink
1913
* attributes.
1914
* @attrs: Bit mask for the netlink attributes included in @a.
1915
* @log: Boolean to allow kernel error logging. Normally true, but when
1916
* probing for feature compatibility this should be passed in as false to
1917
* suppress unnecessary error logging.
1918
*
1919
* This parses a series of Netlink attributes that form a flow key, which must
1920
* take the same form accepted by flow_from_nlattrs(), but only enough of it to
1921
* get the metadata, that is, the parts of the flow key that cannot be
1922
* extracted from the packet itself.
1923
*
1924
* This must be called before the packet key fields are filled in 'key'.
1925
*/
1926
1927
int ovs_nla_get_flow_metadata(struct net *net,
1928
const struct nlattr *a[OVS_KEY_ATTR_MAX + 1],
1929
u64 attrs, struct sw_flow_key *key, bool log)
1930
{
1931
struct sw_flow_match match;
1932
1933
memset(&match, 0, sizeof(match));
1934
match.key = key;
1935
1936
key->ct_state = 0;
1937
key->ct_zone = 0;
1938
key->ct_orig_proto = 0;
1939
memset(&key->ct, 0, sizeof(key->ct));
1940
memset(&key->ipv4.ct_orig, 0, sizeof(key->ipv4.ct_orig));
1941
memset(&key->ipv6.ct_orig, 0, sizeof(key->ipv6.ct_orig));
1942
1943
key->phy.in_port = DP_MAX_PORTS;
1944
1945
return metadata_from_nlattrs(net, &match, &attrs, a, false, log);
1946
}
1947
1948
static int ovs_nla_put_vlan(struct sk_buff *skb, const struct vlan_head *vh,
1949
bool is_mask)
1950
{
1951
__be16 eth_type = !is_mask ? vh->tpid : htons(0xffff);
1952
1953
if (nla_put_be16(skb, OVS_KEY_ATTR_ETHERTYPE, eth_type) ||
1954
nla_put_be16(skb, OVS_KEY_ATTR_VLAN, vh->tci))
1955
return -EMSGSIZE;
1956
return 0;
1957
}
1958
1959
static int nsh_key_to_nlattr(const struct ovs_key_nsh *nsh, bool is_mask,
1960
struct sk_buff *skb)
1961
{
1962
struct nlattr *start;
1963
1964
start = nla_nest_start_noflag(skb, OVS_KEY_ATTR_NSH);
1965
if (!start)
1966
return -EMSGSIZE;
1967
1968
if (nla_put(skb, OVS_NSH_KEY_ATTR_BASE, sizeof(nsh->base), &nsh->base))
1969
goto nla_put_failure;
1970
1971
if (is_mask || nsh->base.mdtype == NSH_M_TYPE1) {
1972
if (nla_put(skb, OVS_NSH_KEY_ATTR_MD1,
1973
sizeof(nsh->context), nsh->context))
1974
goto nla_put_failure;
1975
}
1976
1977
/* Don't support MD type 2 yet */
1978
1979
nla_nest_end(skb, start);
1980
1981
return 0;
1982
1983
nla_put_failure:
1984
return -EMSGSIZE;
1985
}
1986
1987
static int __ovs_nla_put_key(const struct sw_flow_key *swkey,
1988
const struct sw_flow_key *output, bool is_mask,
1989
struct sk_buff *skb)
1990
{
1991
struct ovs_key_ethernet *eth_key;
1992
struct nlattr *nla;
1993
struct nlattr *encap = NULL;
1994
struct nlattr *in_encap = NULL;
1995
1996
if (nla_put_u32(skb, OVS_KEY_ATTR_RECIRC_ID, output->recirc_id))
1997
goto nla_put_failure;
1998
1999
if (nla_put_u32(skb, OVS_KEY_ATTR_DP_HASH, output->ovs_flow_hash))
2000
goto nla_put_failure;
2001
2002
if (nla_put_u32(skb, OVS_KEY_ATTR_PRIORITY, output->phy.priority))
2003
goto nla_put_failure;
2004
2005
if ((swkey->tun_proto || is_mask)) {
2006
const void *opts = NULL;
2007
2008
if (ip_tunnel_is_options_present(output->tun_key.tun_flags))
2009
opts = TUN_METADATA_OPTS(output, swkey->tun_opts_len);
2010
2011
if (ip_tun_to_nlattr(skb, &output->tun_key, opts,
2012
swkey->tun_opts_len, swkey->tun_proto, 0))
2013
goto nla_put_failure;
2014
}
2015
2016
if (swkey->phy.in_port == DP_MAX_PORTS) {
2017
if (is_mask && (output->phy.in_port == 0xffff))
2018
if (nla_put_u32(skb, OVS_KEY_ATTR_IN_PORT, 0xffffffff))
2019
goto nla_put_failure;
2020
} else {
2021
u16 upper_u16;
2022
upper_u16 = !is_mask ? 0 : 0xffff;
2023
2024
if (nla_put_u32(skb, OVS_KEY_ATTR_IN_PORT,
2025
(upper_u16 << 16) | output->phy.in_port))
2026
goto nla_put_failure;
2027
}
2028
2029
if (nla_put_u32(skb, OVS_KEY_ATTR_SKB_MARK, output->phy.skb_mark))
2030
goto nla_put_failure;
2031
2032
if (ovs_ct_put_key(swkey, output, skb))
2033
goto nla_put_failure;
2034
2035
if (ovs_key_mac_proto(swkey) == MAC_PROTO_ETHERNET) {
2036
nla = nla_reserve(skb, OVS_KEY_ATTR_ETHERNET, sizeof(*eth_key));
2037
if (!nla)
2038
goto nla_put_failure;
2039
2040
eth_key = nla_data(nla);
2041
ether_addr_copy(eth_key->eth_src, output->eth.src);
2042
ether_addr_copy(eth_key->eth_dst, output->eth.dst);
2043
2044
if (swkey->eth.vlan.tci || eth_type_vlan(swkey->eth.type)) {
2045
if (ovs_nla_put_vlan(skb, &output->eth.vlan, is_mask))
2046
goto nla_put_failure;
2047
encap = nla_nest_start_noflag(skb, OVS_KEY_ATTR_ENCAP);
2048
if (!swkey->eth.vlan.tci)
2049
goto unencap;
2050
2051
if (swkey->eth.cvlan.tci || eth_type_vlan(swkey->eth.type)) {
2052
if (ovs_nla_put_vlan(skb, &output->eth.cvlan, is_mask))
2053
goto nla_put_failure;
2054
in_encap = nla_nest_start_noflag(skb,
2055
OVS_KEY_ATTR_ENCAP);
2056
if (!swkey->eth.cvlan.tci)
2057
goto unencap;
2058
}
2059
}
2060
2061
if (swkey->eth.type == htons(ETH_P_802_2)) {
2062
/*
2063
* Ethertype 802.2 is represented in the netlink with omitted
2064
* OVS_KEY_ATTR_ETHERTYPE in the flow key attribute, and
2065
* 0xffff in the mask attribute. Ethertype can also
2066
* be wildcarded.
2067
*/
2068
if (is_mask && output->eth.type)
2069
if (nla_put_be16(skb, OVS_KEY_ATTR_ETHERTYPE,
2070
output->eth.type))
2071
goto nla_put_failure;
2072
goto unencap;
2073
}
2074
}
2075
2076
if (nla_put_be16(skb, OVS_KEY_ATTR_ETHERTYPE, output->eth.type))
2077
goto nla_put_failure;
2078
2079
if (eth_type_vlan(swkey->eth.type)) {
2080
/* There are 3 VLAN tags, we don't know anything about the rest
2081
* of the packet, so truncate here.
2082
*/
2083
WARN_ON_ONCE(!(encap && in_encap));
2084
goto unencap;
2085
}
2086
2087
if (swkey->eth.type == htons(ETH_P_IP)) {
2088
struct ovs_key_ipv4 *ipv4_key;
2089
2090
nla = nla_reserve(skb, OVS_KEY_ATTR_IPV4, sizeof(*ipv4_key));
2091
if (!nla)
2092
goto nla_put_failure;
2093
ipv4_key = nla_data(nla);
2094
ipv4_key->ipv4_src = output->ipv4.addr.src;
2095
ipv4_key->ipv4_dst = output->ipv4.addr.dst;
2096
ipv4_key->ipv4_proto = output->ip.proto;
2097
ipv4_key->ipv4_tos = output->ip.tos;
2098
ipv4_key->ipv4_ttl = output->ip.ttl;
2099
ipv4_key->ipv4_frag = output->ip.frag;
2100
} else if (swkey->eth.type == htons(ETH_P_IPV6)) {
2101
struct ovs_key_ipv6 *ipv6_key;
2102
struct ovs_key_ipv6_exthdrs *ipv6_exthdrs_key;
2103
2104
nla = nla_reserve(skb, OVS_KEY_ATTR_IPV6, sizeof(*ipv6_key));
2105
if (!nla)
2106
goto nla_put_failure;
2107
ipv6_key = nla_data(nla);
2108
memcpy(ipv6_key->ipv6_src, &output->ipv6.addr.src,
2109
sizeof(ipv6_key->ipv6_src));
2110
memcpy(ipv6_key->ipv6_dst, &output->ipv6.addr.dst,
2111
sizeof(ipv6_key->ipv6_dst));
2112
ipv6_key->ipv6_label = output->ipv6.label;
2113
ipv6_key->ipv6_proto = output->ip.proto;
2114
ipv6_key->ipv6_tclass = output->ip.tos;
2115
ipv6_key->ipv6_hlimit = output->ip.ttl;
2116
ipv6_key->ipv6_frag = output->ip.frag;
2117
2118
nla = nla_reserve(skb, OVS_KEY_ATTR_IPV6_EXTHDRS,
2119
sizeof(*ipv6_exthdrs_key));
2120
if (!nla)
2121
goto nla_put_failure;
2122
ipv6_exthdrs_key = nla_data(nla);
2123
ipv6_exthdrs_key->hdrs = output->ipv6.exthdrs;
2124
} else if (swkey->eth.type == htons(ETH_P_NSH)) {
2125
if (nsh_key_to_nlattr(&output->nsh, is_mask, skb))
2126
goto nla_put_failure;
2127
} else if (swkey->eth.type == htons(ETH_P_ARP) ||
2128
swkey->eth.type == htons(ETH_P_RARP)) {
2129
struct ovs_key_arp *arp_key;
2130
2131
nla = nla_reserve(skb, OVS_KEY_ATTR_ARP, sizeof(*arp_key));
2132
if (!nla)
2133
goto nla_put_failure;
2134
arp_key = nla_data(nla);
2135
memset(arp_key, 0, sizeof(struct ovs_key_arp));
2136
arp_key->arp_sip = output->ipv4.addr.src;
2137
arp_key->arp_tip = output->ipv4.addr.dst;
2138
arp_key->arp_op = htons(output->ip.proto);
2139
ether_addr_copy(arp_key->arp_sha, output->ipv4.arp.sha);
2140
ether_addr_copy(arp_key->arp_tha, output->ipv4.arp.tha);
2141
} else if (eth_p_mpls(swkey->eth.type)) {
2142
u8 i, num_labels;
2143
struct ovs_key_mpls *mpls_key;
2144
2145
num_labels = hweight_long(output->mpls.num_labels_mask);
2146
nla = nla_reserve(skb, OVS_KEY_ATTR_MPLS,
2147
num_labels * sizeof(*mpls_key));
2148
if (!nla)
2149
goto nla_put_failure;
2150
2151
mpls_key = nla_data(nla);
2152
for (i = 0; i < num_labels; i++)
2153
mpls_key[i].mpls_lse = output->mpls.lse[i];
2154
}
2155
2156
if ((swkey->eth.type == htons(ETH_P_IP) ||
2157
swkey->eth.type == htons(ETH_P_IPV6)) &&
2158
swkey->ip.frag != OVS_FRAG_TYPE_LATER) {
2159
2160
if (swkey->ip.proto == IPPROTO_TCP) {
2161
struct ovs_key_tcp *tcp_key;
2162
2163
nla = nla_reserve(skb, OVS_KEY_ATTR_TCP, sizeof(*tcp_key));
2164
if (!nla)
2165
goto nla_put_failure;
2166
tcp_key = nla_data(nla);
2167
tcp_key->tcp_src = output->tp.src;
2168
tcp_key->tcp_dst = output->tp.dst;
2169
if (nla_put_be16(skb, OVS_KEY_ATTR_TCP_FLAGS,
2170
output->tp.flags))
2171
goto nla_put_failure;
2172
} else if (swkey->ip.proto == IPPROTO_UDP) {
2173
struct ovs_key_udp *udp_key;
2174
2175
nla = nla_reserve(skb, OVS_KEY_ATTR_UDP, sizeof(*udp_key));
2176
if (!nla)
2177
goto nla_put_failure;
2178
udp_key = nla_data(nla);
2179
udp_key->udp_src = output->tp.src;
2180
udp_key->udp_dst = output->tp.dst;
2181
} else if (swkey->ip.proto == IPPROTO_SCTP) {
2182
struct ovs_key_sctp *sctp_key;
2183
2184
nla = nla_reserve(skb, OVS_KEY_ATTR_SCTP, sizeof(*sctp_key));
2185
if (!nla)
2186
goto nla_put_failure;
2187
sctp_key = nla_data(nla);
2188
sctp_key->sctp_src = output->tp.src;
2189
sctp_key->sctp_dst = output->tp.dst;
2190
} else if (swkey->eth.type == htons(ETH_P_IP) &&
2191
swkey->ip.proto == IPPROTO_ICMP) {
2192
struct ovs_key_icmp *icmp_key;
2193
2194
nla = nla_reserve(skb, OVS_KEY_ATTR_ICMP, sizeof(*icmp_key));
2195
if (!nla)
2196
goto nla_put_failure;
2197
icmp_key = nla_data(nla);
2198
icmp_key->icmp_type = ntohs(output->tp.src);
2199
icmp_key->icmp_code = ntohs(output->tp.dst);
2200
} else if (swkey->eth.type == htons(ETH_P_IPV6) &&
2201
swkey->ip.proto == IPPROTO_ICMPV6) {
2202
struct ovs_key_icmpv6 *icmpv6_key;
2203
2204
nla = nla_reserve(skb, OVS_KEY_ATTR_ICMPV6,
2205
sizeof(*icmpv6_key));
2206
if (!nla)
2207
goto nla_put_failure;
2208
icmpv6_key = nla_data(nla);
2209
icmpv6_key->icmpv6_type = ntohs(output->tp.src);
2210
icmpv6_key->icmpv6_code = ntohs(output->tp.dst);
2211
2212
if (swkey->tp.src == htons(NDISC_NEIGHBOUR_SOLICITATION) ||
2213
swkey->tp.src == htons(NDISC_NEIGHBOUR_ADVERTISEMENT)) {
2214
struct ovs_key_nd *nd_key;
2215
2216
nla = nla_reserve(skb, OVS_KEY_ATTR_ND, sizeof(*nd_key));
2217
if (!nla)
2218
goto nla_put_failure;
2219
nd_key = nla_data(nla);
2220
memcpy(nd_key->nd_target, &output->ipv6.nd.target,
2221
sizeof(nd_key->nd_target));
2222
ether_addr_copy(nd_key->nd_sll, output->ipv6.nd.sll);
2223
ether_addr_copy(nd_key->nd_tll, output->ipv6.nd.tll);
2224
}
2225
}
2226
}
2227
2228
unencap:
2229
if (in_encap)
2230
nla_nest_end(skb, in_encap);
2231
if (encap)
2232
nla_nest_end(skb, encap);
2233
2234
return 0;
2235
2236
nla_put_failure:
2237
return -EMSGSIZE;
2238
}
2239
2240
int ovs_nla_put_key(const struct sw_flow_key *swkey,
2241
const struct sw_flow_key *output, int attr, bool is_mask,
2242
struct sk_buff *skb)
2243
{
2244
int err;
2245
struct nlattr *nla;
2246
2247
nla = nla_nest_start_noflag(skb, attr);
2248
if (!nla)
2249
return -EMSGSIZE;
2250
err = __ovs_nla_put_key(swkey, output, is_mask, skb);
2251
if (err)
2252
return err;
2253
nla_nest_end(skb, nla);
2254
2255
return 0;
2256
}
2257
2258
/* Called with ovs_mutex or RCU read lock. */
2259
int ovs_nla_put_identifier(const struct sw_flow *flow, struct sk_buff *skb)
2260
{
2261
if (ovs_identifier_is_ufid(&flow->id))
2262
return nla_put(skb, OVS_FLOW_ATTR_UFID, flow->id.ufid_len,
2263
flow->id.ufid);
2264
2265
return ovs_nla_put_key(flow->id.unmasked_key, flow->id.unmasked_key,
2266
OVS_FLOW_ATTR_KEY, false, skb);
2267
}
2268
2269
/* Called with ovs_mutex or RCU read lock. */
2270
int ovs_nla_put_masked_key(const struct sw_flow *flow, struct sk_buff *skb)
2271
{
2272
return ovs_nla_put_key(&flow->key, &flow->key,
2273
OVS_FLOW_ATTR_KEY, false, skb);
2274
}
2275
2276
/* Called with ovs_mutex or RCU read lock. */
2277
int ovs_nla_put_mask(const struct sw_flow *flow, struct sk_buff *skb)
2278
{
2279
return ovs_nla_put_key(&flow->key, &flow->mask->key,
2280
OVS_FLOW_ATTR_MASK, true, skb);
2281
}
2282
2283
static struct sw_flow_actions *nla_alloc_flow_actions(int size)
2284
{
2285
struct sw_flow_actions *sfa;
2286
2287
sfa = kmalloc(kmalloc_size_roundup(sizeof(*sfa) + size), GFP_KERNEL);
2288
if (!sfa)
2289
return ERR_PTR(-ENOMEM);
2290
2291
sfa->actions_len = 0;
2292
return sfa;
2293
}
2294
2295
static void ovs_nla_free_nested_actions(const struct nlattr *actions, int len);
2296
2297
static void ovs_nla_free_check_pkt_len_action(const struct nlattr *action)
2298
{
2299
const struct nlattr *a;
2300
int rem;
2301
2302
nla_for_each_nested(a, action, rem) {
2303
switch (nla_type(a)) {
2304
case OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL:
2305
case OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER:
2306
ovs_nla_free_nested_actions(nla_data(a), nla_len(a));
2307
break;
2308
}
2309
}
2310
}
2311
2312
static void ovs_nla_free_clone_action(const struct nlattr *action)
2313
{
2314
const struct nlattr *a = nla_data(action);
2315
int rem = nla_len(action);
2316
2317
switch (nla_type(a)) {
2318
case OVS_CLONE_ATTR_EXEC:
2319
/* The real list of actions follows this attribute. */
2320
a = nla_next(a, &rem);
2321
ovs_nla_free_nested_actions(a, rem);
2322
break;
2323
}
2324
}
2325
2326
static void ovs_nla_free_dec_ttl_action(const struct nlattr *action)
2327
{
2328
const struct nlattr *a = nla_data(action);
2329
2330
switch (nla_type(a)) {
2331
case OVS_DEC_TTL_ATTR_ACTION:
2332
ovs_nla_free_nested_actions(nla_data(a), nla_len(a));
2333
break;
2334
}
2335
}
2336
2337
static void ovs_nla_free_sample_action(const struct nlattr *action)
2338
{
2339
const struct nlattr *a = nla_data(action);
2340
int rem = nla_len(action);
2341
2342
switch (nla_type(a)) {
2343
case OVS_SAMPLE_ATTR_ARG:
2344
/* The real list of actions follows this attribute. */
2345
a = nla_next(a, &rem);
2346
ovs_nla_free_nested_actions(a, rem);
2347
break;
2348
}
2349
}
2350
2351
static void ovs_nla_free_set_action(const struct nlattr *a)
2352
{
2353
const struct nlattr *ovs_key = nla_data(a);
2354
struct ovs_tunnel_info *ovs_tun;
2355
2356
switch (nla_type(ovs_key)) {
2357
case OVS_KEY_ATTR_TUNNEL_INFO:
2358
ovs_tun = nla_data(ovs_key);
2359
dst_release((struct dst_entry *)ovs_tun->tun_dst);
2360
break;
2361
}
2362
}
2363
2364
static void ovs_nla_free_nested_actions(const struct nlattr *actions, int len)
2365
{
2366
const struct nlattr *a;
2367
int rem;
2368
2369
/* Whenever new actions are added, the need to update this
2370
* function should be considered.
2371
*/
2372
BUILD_BUG_ON(OVS_ACTION_ATTR_MAX != 25);
2373
2374
if (!actions)
2375
return;
2376
2377
nla_for_each_attr(a, actions, len, rem) {
2378
switch (nla_type(a)) {
2379
case OVS_ACTION_ATTR_CHECK_PKT_LEN:
2380
ovs_nla_free_check_pkt_len_action(a);
2381
break;
2382
2383
case OVS_ACTION_ATTR_CLONE:
2384
ovs_nla_free_clone_action(a);
2385
break;
2386
2387
case OVS_ACTION_ATTR_CT:
2388
ovs_ct_free_action(a);
2389
break;
2390
2391
case OVS_ACTION_ATTR_DEC_TTL:
2392
ovs_nla_free_dec_ttl_action(a);
2393
break;
2394
2395
case OVS_ACTION_ATTR_SAMPLE:
2396
ovs_nla_free_sample_action(a);
2397
break;
2398
2399
case OVS_ACTION_ATTR_SET:
2400
ovs_nla_free_set_action(a);
2401
break;
2402
}
2403
}
2404
}
2405
2406
void ovs_nla_free_flow_actions(struct sw_flow_actions *sf_acts)
2407
{
2408
if (!sf_acts)
2409
return;
2410
2411
ovs_nla_free_nested_actions(sf_acts->actions, sf_acts->actions_len);
2412
kfree(sf_acts);
2413
}
2414
2415
static void __ovs_nla_free_flow_actions(struct rcu_head *head)
2416
{
2417
ovs_nla_free_flow_actions(container_of(head, struct sw_flow_actions, rcu));
2418
}
2419
2420
/* Schedules 'sf_acts' to be freed after the next RCU grace period.
2421
* The caller must hold rcu_read_lock for this to be sensible. */
2422
void ovs_nla_free_flow_actions_rcu(struct sw_flow_actions *sf_acts)
2423
{
2424
call_rcu(&sf_acts->rcu, __ovs_nla_free_flow_actions);
2425
}
2426
2427
static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa,
2428
int attr_len, bool log)
2429
{
2430
2431
struct sw_flow_actions *acts;
2432
int new_acts_size;
2433
size_t req_size = NLA_ALIGN(attr_len);
2434
int next_offset = offsetof(struct sw_flow_actions, actions) +
2435
(*sfa)->actions_len;
2436
2437
if (req_size <= (ksize(*sfa) - next_offset))
2438
goto out;
2439
2440
new_acts_size = max(next_offset + req_size, ksize(*sfa) * 2);
2441
2442
acts = nla_alloc_flow_actions(new_acts_size);
2443
if (IS_ERR(acts))
2444
return ERR_CAST(acts);
2445
2446
memcpy(acts->actions, (*sfa)->actions, (*sfa)->actions_len);
2447
acts->actions_len = (*sfa)->actions_len;
2448
acts->orig_len = (*sfa)->orig_len;
2449
kfree(*sfa);
2450
*sfa = acts;
2451
2452
out:
2453
(*sfa)->actions_len += req_size;
2454
return (struct nlattr *) ((unsigned char *)(*sfa) + next_offset);
2455
}
2456
2457
static struct nlattr *__add_action(struct sw_flow_actions **sfa,
2458
int attrtype, void *data, int len, bool log)
2459
{
2460
struct nlattr *a;
2461
2462
a = reserve_sfa_size(sfa, nla_attr_size(len), log);
2463
if (IS_ERR(a))
2464
return a;
2465
2466
a->nla_type = attrtype;
2467
a->nla_len = nla_attr_size(len);
2468
2469
if (data)
2470
memcpy(nla_data(a), data, len);
2471
memset((unsigned char *) a + a->nla_len, 0, nla_padlen(len));
2472
2473
return a;
2474
}
2475
2476
int ovs_nla_add_action(struct sw_flow_actions **sfa, int attrtype, void *data,
2477
int len, bool log)
2478
{
2479
struct nlattr *a;
2480
2481
a = __add_action(sfa, attrtype, data, len, log);
2482
2483
return PTR_ERR_OR_ZERO(a);
2484
}
2485
2486
static inline int add_nested_action_start(struct sw_flow_actions **sfa,
2487
int attrtype, bool log)
2488
{
2489
int used = (*sfa)->actions_len;
2490
int err;
2491
2492
err = ovs_nla_add_action(sfa, attrtype, NULL, 0, log);
2493
if (err)
2494
return err;
2495
2496
return used;
2497
}
2498
2499
static inline void add_nested_action_end(struct sw_flow_actions *sfa,
2500
int st_offset)
2501
{
2502
struct nlattr *a = (struct nlattr *) ((unsigned char *)sfa->actions +
2503
st_offset);
2504
2505
a->nla_len = sfa->actions_len - st_offset;
2506
}
2507
2508
static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
2509
const struct sw_flow_key *key,
2510
struct sw_flow_actions **sfa,
2511
__be16 eth_type, __be16 vlan_tci,
2512
u32 mpls_label_count, bool log,
2513
u32 depth);
2514
2515
static int validate_and_copy_sample(struct net *net, const struct nlattr *attr,
2516
const struct sw_flow_key *key,
2517
struct sw_flow_actions **sfa,
2518
__be16 eth_type, __be16 vlan_tci,
2519
u32 mpls_label_count, bool log, bool last,
2520
u32 depth)
2521
{
2522
const struct nlattr *attrs[OVS_SAMPLE_ATTR_MAX + 1];
2523
const struct nlattr *probability, *actions;
2524
const struct nlattr *a;
2525
int rem, start, err;
2526
struct sample_arg arg;
2527
2528
memset(attrs, 0, sizeof(attrs));
2529
nla_for_each_nested(a, attr, rem) {
2530
int type = nla_type(a);
2531
if (!type || type > OVS_SAMPLE_ATTR_MAX || attrs[type])
2532
return -EINVAL;
2533
attrs[type] = a;
2534
}
2535
if (rem)
2536
return -EINVAL;
2537
2538
probability = attrs[OVS_SAMPLE_ATTR_PROBABILITY];
2539
if (!probability || nla_len(probability) != sizeof(u32))
2540
return -EINVAL;
2541
2542
actions = attrs[OVS_SAMPLE_ATTR_ACTIONS];
2543
if (!actions || (nla_len(actions) && nla_len(actions) < NLA_HDRLEN))
2544
return -EINVAL;
2545
2546
/* validation done, copy sample action. */
2547
start = add_nested_action_start(sfa, OVS_ACTION_ATTR_SAMPLE, log);
2548
if (start < 0)
2549
return start;
2550
2551
/* When both skb and flow may be changed, put the sample
2552
* into a deferred fifo. On the other hand, if only skb
2553
* may be modified, the actions can be executed in place.
2554
*
2555
* Do this analysis at the flow installation time.
2556
* Set 'clone_action->exec' to true if the actions can be
2557
* executed without being deferred.
2558
*
2559
* If the sample is the last action, it can always be excuted
2560
* rather than deferred.
2561
*/
2562
arg.exec = last || !actions_may_change_flow(actions);
2563
arg.probability = nla_get_u32(probability);
2564
2565
err = ovs_nla_add_action(sfa, OVS_SAMPLE_ATTR_ARG, &arg, sizeof(arg),
2566
log);
2567
if (err)
2568
return err;
2569
2570
err = __ovs_nla_copy_actions(net, actions, key, sfa,
2571
eth_type, vlan_tci, mpls_label_count, log,
2572
depth + 1);
2573
2574
if (err)
2575
return err;
2576
2577
add_nested_action_end(*sfa, start);
2578
2579
return 0;
2580
}
2581
2582
static int validate_and_copy_dec_ttl(struct net *net,
2583
const struct nlattr *attr,
2584
const struct sw_flow_key *key,
2585
struct sw_flow_actions **sfa,
2586
__be16 eth_type, __be16 vlan_tci,
2587
u32 mpls_label_count, bool log,
2588
u32 depth)
2589
{
2590
const struct nlattr *attrs[OVS_DEC_TTL_ATTR_MAX + 1];
2591
int start, action_start, err, rem;
2592
const struct nlattr *a, *actions;
2593
2594
memset(attrs, 0, sizeof(attrs));
2595
nla_for_each_nested(a, attr, rem) {
2596
int type = nla_type(a);
2597
2598
/* Ignore unknown attributes to be future proof. */
2599
if (type > OVS_DEC_TTL_ATTR_MAX)
2600
continue;
2601
2602
if (!type || attrs[type]) {
2603
OVS_NLERR(log, "Duplicate or invalid key (type %d).",
2604
type);
2605
return -EINVAL;
2606
}
2607
2608
attrs[type] = a;
2609
}
2610
2611
if (rem) {
2612
OVS_NLERR(log, "Message has %d unknown bytes.", rem);
2613
return -EINVAL;
2614
}
2615
2616
actions = attrs[OVS_DEC_TTL_ATTR_ACTION];
2617
if (!actions || (nla_len(actions) && nla_len(actions) < NLA_HDRLEN)) {
2618
OVS_NLERR(log, "Missing valid actions attribute.");
2619
return -EINVAL;
2620
}
2621
2622
start = add_nested_action_start(sfa, OVS_ACTION_ATTR_DEC_TTL, log);
2623
if (start < 0)
2624
return start;
2625
2626
action_start = add_nested_action_start(sfa, OVS_DEC_TTL_ATTR_ACTION, log);
2627
if (action_start < 0)
2628
return action_start;
2629
2630
err = __ovs_nla_copy_actions(net, actions, key, sfa, eth_type,
2631
vlan_tci, mpls_label_count, log,
2632
depth + 1);
2633
if (err)
2634
return err;
2635
2636
add_nested_action_end(*sfa, action_start);
2637
add_nested_action_end(*sfa, start);
2638
return 0;
2639
}
2640
2641
static int validate_and_copy_clone(struct net *net,
2642
const struct nlattr *attr,
2643
const struct sw_flow_key *key,
2644
struct sw_flow_actions **sfa,
2645
__be16 eth_type, __be16 vlan_tci,
2646
u32 mpls_label_count, bool log, bool last,
2647
u32 depth)
2648
{
2649
int start, err;
2650
u32 exec;
2651
2652
if (nla_len(attr) && nla_len(attr) < NLA_HDRLEN)
2653
return -EINVAL;
2654
2655
start = add_nested_action_start(sfa, OVS_ACTION_ATTR_CLONE, log);
2656
if (start < 0)
2657
return start;
2658
2659
exec = last || !actions_may_change_flow(attr);
2660
2661
err = ovs_nla_add_action(sfa, OVS_CLONE_ATTR_EXEC, &exec,
2662
sizeof(exec), log);
2663
if (err)
2664
return err;
2665
2666
err = __ovs_nla_copy_actions(net, attr, key, sfa,
2667
eth_type, vlan_tci, mpls_label_count, log,
2668
depth + 1);
2669
if (err)
2670
return err;
2671
2672
add_nested_action_end(*sfa, start);
2673
2674
return 0;
2675
}
2676
2677
void ovs_match_init(struct sw_flow_match *match,
2678
struct sw_flow_key *key,
2679
bool reset_key,
2680
struct sw_flow_mask *mask)
2681
{
2682
memset(match, 0, sizeof(*match));
2683
match->key = key;
2684
match->mask = mask;
2685
2686
if (reset_key)
2687
memset(key, 0, sizeof(*key));
2688
2689
if (mask) {
2690
memset(&mask->key, 0, sizeof(mask->key));
2691
mask->range.start = mask->range.end = 0;
2692
}
2693
}
2694
2695
static int validate_geneve_opts(struct sw_flow_key *key)
2696
{
2697
struct geneve_opt *option;
2698
int opts_len = key->tun_opts_len;
2699
bool crit_opt = false;
2700
2701
option = (struct geneve_opt *)TUN_METADATA_OPTS(key, key->tun_opts_len);
2702
while (opts_len > 0) {
2703
int len;
2704
2705
if (opts_len < sizeof(*option))
2706
return -EINVAL;
2707
2708
len = sizeof(*option) + option->length * 4;
2709
if (len > opts_len)
2710
return -EINVAL;
2711
2712
crit_opt |= !!(option->type & GENEVE_CRIT_OPT_TYPE);
2713
2714
option = (struct geneve_opt *)((u8 *)option + len);
2715
opts_len -= len;
2716
}
2717
2718
if (crit_opt)
2719
__set_bit(IP_TUNNEL_CRIT_OPT_BIT, key->tun_key.tun_flags);
2720
2721
return 0;
2722
}
2723
2724
static int validate_and_copy_set_tun(const struct nlattr *attr,
2725
struct sw_flow_actions **sfa, bool log)
2726
{
2727
IP_TUNNEL_DECLARE_FLAGS(dst_opt_type) = { };
2728
struct sw_flow_match match;
2729
struct sw_flow_key key;
2730
struct metadata_dst *tun_dst;
2731
struct ip_tunnel_info *tun_info;
2732
struct ovs_tunnel_info *ovs_tun;
2733
struct nlattr *a;
2734
int err = 0, start, opts_type;
2735
2736
ovs_match_init(&match, &key, true, NULL);
2737
opts_type = ip_tun_from_nlattr(nla_data(attr), &match, false, log);
2738
if (opts_type < 0)
2739
return opts_type;
2740
2741
if (key.tun_opts_len) {
2742
switch (opts_type) {
2743
case OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS:
2744
err = validate_geneve_opts(&key);
2745
if (err < 0)
2746
return err;
2747
2748
__set_bit(IP_TUNNEL_GENEVE_OPT_BIT, dst_opt_type);
2749
break;
2750
case OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS:
2751
__set_bit(IP_TUNNEL_VXLAN_OPT_BIT, dst_opt_type);
2752
break;
2753
case OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS:
2754
__set_bit(IP_TUNNEL_ERSPAN_OPT_BIT, dst_opt_type);
2755
break;
2756
}
2757
}
2758
2759
start = add_nested_action_start(sfa, OVS_ACTION_ATTR_SET, log);
2760
if (start < 0)
2761
return start;
2762
2763
tun_dst = metadata_dst_alloc(key.tun_opts_len, METADATA_IP_TUNNEL,
2764
GFP_KERNEL);
2765
2766
if (!tun_dst)
2767
return -ENOMEM;
2768
2769
err = dst_cache_init(&tun_dst->u.tun_info.dst_cache, GFP_KERNEL);
2770
if (err) {
2771
dst_release((struct dst_entry *)tun_dst);
2772
return err;
2773
}
2774
2775
a = __add_action(sfa, OVS_KEY_ATTR_TUNNEL_INFO, NULL,
2776
sizeof(*ovs_tun), log);
2777
if (IS_ERR(a)) {
2778
dst_release((struct dst_entry *)tun_dst);
2779
return PTR_ERR(a);
2780
}
2781
2782
ovs_tun = nla_data(a);
2783
ovs_tun->tun_dst = tun_dst;
2784
2785
tun_info = &tun_dst->u.tun_info;
2786
tun_info->mode = IP_TUNNEL_INFO_TX;
2787
if (key.tun_proto == AF_INET6)
2788
tun_info->mode |= IP_TUNNEL_INFO_IPV6;
2789
else if (key.tun_proto == AF_INET && key.tun_key.u.ipv4.dst == 0)
2790
tun_info->mode |= IP_TUNNEL_INFO_BRIDGE;
2791
tun_info->key = key.tun_key;
2792
2793
/* We need to store the options in the action itself since
2794
* everything else will go away after flow setup. We can append
2795
* it to tun_info and then point there.
2796
*/
2797
ip_tunnel_info_opts_set(tun_info,
2798
TUN_METADATA_OPTS(&key, key.tun_opts_len),
2799
key.tun_opts_len, dst_opt_type);
2800
add_nested_action_end(*sfa, start);
2801
2802
return err;
2803
}
2804
2805
static bool validate_push_nsh(const struct nlattr *a, bool log)
2806
{
2807
struct nlattr *nsh_key = nla_data(a);
2808
struct sw_flow_match match;
2809
struct sw_flow_key key;
2810
2811
/* There must be one and only one NSH header. */
2812
if (!nla_ok(nsh_key, nla_len(a)) ||
2813
nla_total_size(nla_len(nsh_key)) != nla_len(a) ||
2814
nla_type(nsh_key) != OVS_KEY_ATTR_NSH)
2815
return false;
2816
2817
ovs_match_init(&match, &key, true, NULL);
2818
return !nsh_key_put_from_nlattr(nsh_key, &match, false, true, log);
2819
}
2820
2821
/* Return false if there are any non-masked bits set.
2822
* Mask follows data immediately, before any netlink padding.
2823
*/
2824
static bool validate_masked(u8 *data, int len)
2825
{
2826
u8 *mask = data + len;
2827
2828
while (len--)
2829
if (*data++ & ~*mask++)
2830
return false;
2831
2832
return true;
2833
}
2834
2835
static int validate_set(const struct nlattr *a,
2836
const struct sw_flow_key *flow_key,
2837
struct sw_flow_actions **sfa, bool *skip_copy,
2838
u8 mac_proto, __be16 eth_type, bool masked, bool log)
2839
{
2840
const struct nlattr *ovs_key = nla_data(a);
2841
int key_type = nla_type(ovs_key);
2842
size_t key_len;
2843
2844
/* There can be only one key in a action */
2845
if (!nla_ok(ovs_key, nla_len(a)) ||
2846
nla_total_size(nla_len(ovs_key)) != nla_len(a))
2847
return -EINVAL;
2848
2849
key_len = nla_len(ovs_key);
2850
if (masked)
2851
key_len /= 2;
2852
2853
if (key_type > OVS_KEY_ATTR_MAX ||
2854
!check_attr_len(key_len, ovs_key_lens[key_type].len))
2855
return -EINVAL;
2856
2857
if (masked && !validate_masked(nla_data(ovs_key), key_len))
2858
return -EINVAL;
2859
2860
switch (key_type) {
2861
case OVS_KEY_ATTR_PRIORITY:
2862
case OVS_KEY_ATTR_SKB_MARK:
2863
case OVS_KEY_ATTR_CT_MARK:
2864
case OVS_KEY_ATTR_CT_LABELS:
2865
break;
2866
2867
case OVS_KEY_ATTR_ETHERNET:
2868
if (mac_proto != MAC_PROTO_ETHERNET)
2869
return -EINVAL;
2870
break;
2871
2872
case OVS_KEY_ATTR_TUNNEL: {
2873
int err;
2874
2875
if (masked)
2876
return -EINVAL; /* Masked tunnel set not supported. */
2877
2878
*skip_copy = true;
2879
err = validate_and_copy_set_tun(a, sfa, log);
2880
if (err)
2881
return err;
2882
break;
2883
}
2884
case OVS_KEY_ATTR_IPV4: {
2885
const struct ovs_key_ipv4 *ipv4_key;
2886
2887
if (eth_type != htons(ETH_P_IP))
2888
return -EINVAL;
2889
2890
ipv4_key = nla_data(ovs_key);
2891
2892
if (masked) {
2893
const struct ovs_key_ipv4 *mask = ipv4_key + 1;
2894
2895
/* Non-writeable fields. */
2896
if (mask->ipv4_proto || mask->ipv4_frag)
2897
return -EINVAL;
2898
} else {
2899
if (ipv4_key->ipv4_proto != flow_key->ip.proto)
2900
return -EINVAL;
2901
2902
if (ipv4_key->ipv4_frag != flow_key->ip.frag)
2903
return -EINVAL;
2904
}
2905
break;
2906
}
2907
case OVS_KEY_ATTR_IPV6: {
2908
const struct ovs_key_ipv6 *ipv6_key;
2909
2910
if (eth_type != htons(ETH_P_IPV6))
2911
return -EINVAL;
2912
2913
ipv6_key = nla_data(ovs_key);
2914
2915
if (masked) {
2916
const struct ovs_key_ipv6 *mask = ipv6_key + 1;
2917
2918
/* Non-writeable fields. */
2919
if (mask->ipv6_proto || mask->ipv6_frag)
2920
return -EINVAL;
2921
2922
/* Invalid bits in the flow label mask? */
2923
if (ntohl(mask->ipv6_label) & 0xFFF00000)
2924
return -EINVAL;
2925
} else {
2926
if (ipv6_key->ipv6_proto != flow_key->ip.proto)
2927
return -EINVAL;
2928
2929
if (ipv6_key->ipv6_frag != flow_key->ip.frag)
2930
return -EINVAL;
2931
}
2932
if (ntohl(ipv6_key->ipv6_label) & 0xFFF00000)
2933
return -EINVAL;
2934
2935
break;
2936
}
2937
case OVS_KEY_ATTR_TCP:
2938
if ((eth_type != htons(ETH_P_IP) &&
2939
eth_type != htons(ETH_P_IPV6)) ||
2940
flow_key->ip.proto != IPPROTO_TCP)
2941
return -EINVAL;
2942
2943
break;
2944
2945
case OVS_KEY_ATTR_UDP:
2946
if ((eth_type != htons(ETH_P_IP) &&
2947
eth_type != htons(ETH_P_IPV6)) ||
2948
flow_key->ip.proto != IPPROTO_UDP)
2949
return -EINVAL;
2950
2951
break;
2952
2953
case OVS_KEY_ATTR_MPLS:
2954
if (!eth_p_mpls(eth_type))
2955
return -EINVAL;
2956
if (key_len != sizeof(struct ovs_key_mpls))
2957
return -EINVAL;
2958
break;
2959
2960
case OVS_KEY_ATTR_SCTP:
2961
if ((eth_type != htons(ETH_P_IP) &&
2962
eth_type != htons(ETH_P_IPV6)) ||
2963
flow_key->ip.proto != IPPROTO_SCTP)
2964
return -EINVAL;
2965
2966
break;
2967
2968
default:
2969
return -EINVAL;
2970
}
2971
2972
/* Convert non-masked non-tunnel set actions to masked set actions. */
2973
if (!masked && key_type != OVS_KEY_ATTR_TUNNEL) {
2974
int start, len = key_len * 2;
2975
struct nlattr *at;
2976
2977
*skip_copy = true;
2978
2979
start = add_nested_action_start(sfa,
2980
OVS_ACTION_ATTR_SET_TO_MASKED,
2981
log);
2982
if (start < 0)
2983
return start;
2984
2985
at = __add_action(sfa, key_type, NULL, len, log);
2986
if (IS_ERR(at))
2987
return PTR_ERR(at);
2988
2989
memcpy(nla_data(at), nla_data(ovs_key), key_len); /* Key. */
2990
memset(nla_data(at) + key_len, 0xff, key_len); /* Mask. */
2991
/* Clear non-writeable bits from otherwise writeable fields. */
2992
if (key_type == OVS_KEY_ATTR_IPV6) {
2993
struct ovs_key_ipv6 *mask = nla_data(at) + key_len;
2994
2995
mask->ipv6_label &= htonl(0x000FFFFF);
2996
}
2997
add_nested_action_end(*sfa, start);
2998
}
2999
3000
return 0;
3001
}
3002
3003
static int validate_userspace(const struct nlattr *attr)
3004
{
3005
static const struct nla_policy userspace_policy[OVS_USERSPACE_ATTR_MAX + 1] = {
3006
[OVS_USERSPACE_ATTR_PID] = {.type = NLA_U32 },
3007
[OVS_USERSPACE_ATTR_USERDATA] = {.type = NLA_UNSPEC },
3008
[OVS_USERSPACE_ATTR_EGRESS_TUN_PORT] = {.type = NLA_U32 },
3009
};
3010
struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1];
3011
int error;
3012
3013
error = nla_parse_deprecated_strict(a, OVS_USERSPACE_ATTR_MAX,
3014
nla_data(attr), nla_len(attr),
3015
userspace_policy, NULL);
3016
if (error)
3017
return error;
3018
3019
if (!a[OVS_USERSPACE_ATTR_PID] ||
3020
!nla_get_u32(a[OVS_USERSPACE_ATTR_PID]))
3021
return -EINVAL;
3022
3023
return 0;
3024
}
3025
3026
static const struct nla_policy cpl_policy[OVS_CHECK_PKT_LEN_ATTR_MAX + 1] = {
3027
[OVS_CHECK_PKT_LEN_ATTR_PKT_LEN] = {.type = NLA_U16 },
3028
[OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER] = {.type = NLA_NESTED },
3029
[OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL] = {.type = NLA_NESTED },
3030
};
3031
3032
static int validate_and_copy_check_pkt_len(struct net *net,
3033
const struct nlattr *attr,
3034
const struct sw_flow_key *key,
3035
struct sw_flow_actions **sfa,
3036
__be16 eth_type, __be16 vlan_tci,
3037
u32 mpls_label_count,
3038
bool log, bool last, u32 depth)
3039
{
3040
const struct nlattr *acts_if_greater, *acts_if_lesser_eq;
3041
struct nlattr *a[OVS_CHECK_PKT_LEN_ATTR_MAX + 1];
3042
struct check_pkt_len_arg arg;
3043
int nested_acts_start;
3044
int start, err;
3045
3046
err = nla_parse_deprecated_strict(a, OVS_CHECK_PKT_LEN_ATTR_MAX,
3047
nla_data(attr), nla_len(attr),
3048
cpl_policy, NULL);
3049
if (err)
3050
return err;
3051
3052
if (!a[OVS_CHECK_PKT_LEN_ATTR_PKT_LEN] ||
3053
!nla_get_u16(a[OVS_CHECK_PKT_LEN_ATTR_PKT_LEN]))
3054
return -EINVAL;
3055
3056
acts_if_lesser_eq = a[OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL];
3057
acts_if_greater = a[OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER];
3058
3059
/* Both the nested action should be present. */
3060
if (!acts_if_greater || !acts_if_lesser_eq)
3061
return -EINVAL;
3062
3063
/* validation done, copy the nested actions. */
3064
start = add_nested_action_start(sfa, OVS_ACTION_ATTR_CHECK_PKT_LEN,
3065
log);
3066
if (start < 0)
3067
return start;
3068
3069
arg.pkt_len = nla_get_u16(a[OVS_CHECK_PKT_LEN_ATTR_PKT_LEN]);
3070
arg.exec_for_lesser_equal =
3071
last || !actions_may_change_flow(acts_if_lesser_eq);
3072
arg.exec_for_greater =
3073
last || !actions_may_change_flow(acts_if_greater);
3074
3075
err = ovs_nla_add_action(sfa, OVS_CHECK_PKT_LEN_ATTR_ARG, &arg,
3076
sizeof(arg), log);
3077
if (err)
3078
return err;
3079
3080
nested_acts_start = add_nested_action_start(sfa,
3081
OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL, log);
3082
if (nested_acts_start < 0)
3083
return nested_acts_start;
3084
3085
err = __ovs_nla_copy_actions(net, acts_if_lesser_eq, key, sfa,
3086
eth_type, vlan_tci, mpls_label_count, log,
3087
depth + 1);
3088
3089
if (err)
3090
return err;
3091
3092
add_nested_action_end(*sfa, nested_acts_start);
3093
3094
nested_acts_start = add_nested_action_start(sfa,
3095
OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER, log);
3096
if (nested_acts_start < 0)
3097
return nested_acts_start;
3098
3099
err = __ovs_nla_copy_actions(net, acts_if_greater, key, sfa,
3100
eth_type, vlan_tci, mpls_label_count, log,
3101
depth + 1);
3102
3103
if (err)
3104
return err;
3105
3106
add_nested_action_end(*sfa, nested_acts_start);
3107
add_nested_action_end(*sfa, start);
3108
return 0;
3109
}
3110
3111
static int validate_psample(const struct nlattr *attr)
3112
{
3113
static const struct nla_policy policy[OVS_PSAMPLE_ATTR_MAX + 1] = {
3114
[OVS_PSAMPLE_ATTR_GROUP] = { .type = NLA_U32 },
3115
[OVS_PSAMPLE_ATTR_COOKIE] = {
3116
.type = NLA_BINARY,
3117
.len = OVS_PSAMPLE_COOKIE_MAX_SIZE,
3118
},
3119
};
3120
struct nlattr *a[OVS_PSAMPLE_ATTR_MAX + 1];
3121
int err;
3122
3123
if (!IS_ENABLED(CONFIG_PSAMPLE))
3124
return -EOPNOTSUPP;
3125
3126
err = nla_parse_nested(a, OVS_PSAMPLE_ATTR_MAX, attr, policy, NULL);
3127
if (err)
3128
return err;
3129
3130
return a[OVS_PSAMPLE_ATTR_GROUP] ? 0 : -EINVAL;
3131
}
3132
3133
static int copy_action(const struct nlattr *from,
3134
struct sw_flow_actions **sfa, bool log)
3135
{
3136
int totlen = NLA_ALIGN(from->nla_len);
3137
struct nlattr *to;
3138
3139
to = reserve_sfa_size(sfa, from->nla_len, log);
3140
if (IS_ERR(to))
3141
return PTR_ERR(to);
3142
3143
memcpy(to, from, totlen);
3144
return 0;
3145
}
3146
3147
static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
3148
const struct sw_flow_key *key,
3149
struct sw_flow_actions **sfa,
3150
__be16 eth_type, __be16 vlan_tci,
3151
u32 mpls_label_count, bool log,
3152
u32 depth)
3153
{
3154
u8 mac_proto = ovs_key_mac_proto(key);
3155
const struct nlattr *a;
3156
int rem, err;
3157
3158
if (depth > OVS_COPY_ACTIONS_MAX_DEPTH)
3159
return -EOVERFLOW;
3160
3161
nla_for_each_nested(a, attr, rem) {
3162
/* Expected argument lengths, (u32)-1 for variable length. */
3163
static const u32 action_lens[OVS_ACTION_ATTR_MAX + 1] = {
3164
[OVS_ACTION_ATTR_OUTPUT] = sizeof(u32),
3165
[OVS_ACTION_ATTR_RECIRC] = sizeof(u32),
3166
[OVS_ACTION_ATTR_USERSPACE] = (u32)-1,
3167
[OVS_ACTION_ATTR_PUSH_MPLS] = sizeof(struct ovs_action_push_mpls),
3168
[OVS_ACTION_ATTR_POP_MPLS] = sizeof(__be16),
3169
[OVS_ACTION_ATTR_PUSH_VLAN] = sizeof(struct ovs_action_push_vlan),
3170
[OVS_ACTION_ATTR_POP_VLAN] = 0,
3171
[OVS_ACTION_ATTR_SET] = (u32)-1,
3172
[OVS_ACTION_ATTR_SET_MASKED] = (u32)-1,
3173
[OVS_ACTION_ATTR_SAMPLE] = (u32)-1,
3174
[OVS_ACTION_ATTR_HASH] = sizeof(struct ovs_action_hash),
3175
[OVS_ACTION_ATTR_CT] = (u32)-1,
3176
[OVS_ACTION_ATTR_CT_CLEAR] = 0,
3177
[OVS_ACTION_ATTR_TRUNC] = sizeof(struct ovs_action_trunc),
3178
[OVS_ACTION_ATTR_PUSH_ETH] = sizeof(struct ovs_action_push_eth),
3179
[OVS_ACTION_ATTR_POP_ETH] = 0,
3180
[OVS_ACTION_ATTR_PUSH_NSH] = (u32)-1,
3181
[OVS_ACTION_ATTR_POP_NSH] = 0,
3182
[OVS_ACTION_ATTR_METER] = sizeof(u32),
3183
[OVS_ACTION_ATTR_CLONE] = (u32)-1,
3184
[OVS_ACTION_ATTR_CHECK_PKT_LEN] = (u32)-1,
3185
[OVS_ACTION_ATTR_ADD_MPLS] = sizeof(struct ovs_action_add_mpls),
3186
[OVS_ACTION_ATTR_DEC_TTL] = (u32)-1,
3187
[OVS_ACTION_ATTR_DROP] = sizeof(u32),
3188
[OVS_ACTION_ATTR_PSAMPLE] = (u32)-1,
3189
};
3190
const struct ovs_action_push_vlan *vlan;
3191
int type = nla_type(a);
3192
bool skip_copy;
3193
3194
if (type > OVS_ACTION_ATTR_MAX ||
3195
(action_lens[type] != nla_len(a) &&
3196
action_lens[type] != (u32)-1))
3197
return -EINVAL;
3198
3199
skip_copy = false;
3200
switch (type) {
3201
case OVS_ACTION_ATTR_UNSPEC:
3202
return -EINVAL;
3203
3204
case OVS_ACTION_ATTR_USERSPACE:
3205
err = validate_userspace(a);
3206
if (err)
3207
return err;
3208
break;
3209
3210
case OVS_ACTION_ATTR_OUTPUT:
3211
if (nla_get_u32(a) >= DP_MAX_PORTS)
3212
return -EINVAL;
3213
break;
3214
3215
case OVS_ACTION_ATTR_TRUNC: {
3216
const struct ovs_action_trunc *trunc = nla_data(a);
3217
3218
if (trunc->max_len < ETH_HLEN)
3219
return -EINVAL;
3220
break;
3221
}
3222
3223
case OVS_ACTION_ATTR_HASH: {
3224
const struct ovs_action_hash *act_hash = nla_data(a);
3225
3226
switch (act_hash->hash_alg) {
3227
case OVS_HASH_ALG_L4:
3228
fallthrough;
3229
case OVS_HASH_ALG_SYM_L4:
3230
break;
3231
default:
3232
return -EINVAL;
3233
}
3234
3235
break;
3236
}
3237
3238
case OVS_ACTION_ATTR_POP_VLAN:
3239
if (mac_proto != MAC_PROTO_ETHERNET)
3240
return -EINVAL;
3241
vlan_tci = htons(0);
3242
break;
3243
3244
case OVS_ACTION_ATTR_PUSH_VLAN:
3245
if (mac_proto != MAC_PROTO_ETHERNET)
3246
return -EINVAL;
3247
vlan = nla_data(a);
3248
if (!eth_type_vlan(vlan->vlan_tpid))
3249
return -EINVAL;
3250
if (!(vlan->vlan_tci & htons(VLAN_CFI_MASK)))
3251
return -EINVAL;
3252
vlan_tci = vlan->vlan_tci;
3253
break;
3254
3255
case OVS_ACTION_ATTR_RECIRC:
3256
break;
3257
3258
case OVS_ACTION_ATTR_ADD_MPLS: {
3259
const struct ovs_action_add_mpls *mpls = nla_data(a);
3260
3261
if (!eth_p_mpls(mpls->mpls_ethertype))
3262
return -EINVAL;
3263
3264
if (mpls->tun_flags & OVS_MPLS_L3_TUNNEL_FLAG_MASK) {
3265
if (vlan_tci & htons(VLAN_CFI_MASK) ||
3266
(eth_type != htons(ETH_P_IP) &&
3267
eth_type != htons(ETH_P_IPV6) &&
3268
eth_type != htons(ETH_P_ARP) &&
3269
eth_type != htons(ETH_P_RARP) &&
3270
!eth_p_mpls(eth_type)))
3271
return -EINVAL;
3272
mpls_label_count++;
3273
} else {
3274
if (mac_proto == MAC_PROTO_ETHERNET) {
3275
mpls_label_count = 1;
3276
mac_proto = MAC_PROTO_NONE;
3277
} else {
3278
mpls_label_count++;
3279
}
3280
}
3281
eth_type = mpls->mpls_ethertype;
3282
break;
3283
}
3284
3285
case OVS_ACTION_ATTR_PUSH_MPLS: {
3286
const struct ovs_action_push_mpls *mpls = nla_data(a);
3287
3288
if (!eth_p_mpls(mpls->mpls_ethertype))
3289
return -EINVAL;
3290
/* Prohibit push MPLS other than to a white list
3291
* for packets that have a known tag order.
3292
*/
3293
if (vlan_tci & htons(VLAN_CFI_MASK) ||
3294
(eth_type != htons(ETH_P_IP) &&
3295
eth_type != htons(ETH_P_IPV6) &&
3296
eth_type != htons(ETH_P_ARP) &&
3297
eth_type != htons(ETH_P_RARP) &&
3298
!eth_p_mpls(eth_type)))
3299
return -EINVAL;
3300
eth_type = mpls->mpls_ethertype;
3301
mpls_label_count++;
3302
break;
3303
}
3304
3305
case OVS_ACTION_ATTR_POP_MPLS: {
3306
__be16 proto;
3307
if (vlan_tci & htons(VLAN_CFI_MASK) ||
3308
!eth_p_mpls(eth_type))
3309
return -EINVAL;
3310
3311
/* Disallow subsequent L2.5+ set actions and mpls_pop
3312
* actions once the last MPLS label in the packet is
3313
* popped as there is no check here to ensure that
3314
* the new eth type is valid and thus set actions could
3315
* write off the end of the packet or otherwise corrupt
3316
* it.
3317
*
3318
* Support for these actions is planned using packet
3319
* recirculation.
3320
*/
3321
proto = nla_get_be16(a);
3322
3323
if (proto == htons(ETH_P_TEB) &&
3324
mac_proto != MAC_PROTO_NONE)
3325
return -EINVAL;
3326
3327
mpls_label_count--;
3328
3329
if (!eth_p_mpls(proto) || !mpls_label_count)
3330
eth_type = htons(0);
3331
else
3332
eth_type = proto;
3333
3334
break;
3335
}
3336
3337
case OVS_ACTION_ATTR_SET:
3338
err = validate_set(a, key, sfa,
3339
&skip_copy, mac_proto, eth_type,
3340
false, log);
3341
if (err)
3342
return err;
3343
break;
3344
3345
case OVS_ACTION_ATTR_SET_MASKED:
3346
err = validate_set(a, key, sfa,
3347
&skip_copy, mac_proto, eth_type,
3348
true, log);
3349
if (err)
3350
return err;
3351
break;
3352
3353
case OVS_ACTION_ATTR_SAMPLE: {
3354
bool last = nla_is_last(a, rem);
3355
3356
err = validate_and_copy_sample(net, a, key, sfa,
3357
eth_type, vlan_tci,
3358
mpls_label_count,
3359
log, last, depth);
3360
if (err)
3361
return err;
3362
skip_copy = true;
3363
break;
3364
}
3365
3366
case OVS_ACTION_ATTR_CT:
3367
err = ovs_ct_copy_action(net, a, key, sfa, log);
3368
if (err)
3369
return err;
3370
skip_copy = true;
3371
break;
3372
3373
case OVS_ACTION_ATTR_CT_CLEAR:
3374
break;
3375
3376
case OVS_ACTION_ATTR_PUSH_ETH:
3377
/* Disallow pushing an Ethernet header if one
3378
* is already present */
3379
if (mac_proto != MAC_PROTO_NONE)
3380
return -EINVAL;
3381
mac_proto = MAC_PROTO_ETHERNET;
3382
break;
3383
3384
case OVS_ACTION_ATTR_POP_ETH:
3385
if (mac_proto != MAC_PROTO_ETHERNET)
3386
return -EINVAL;
3387
if (vlan_tci & htons(VLAN_CFI_MASK))
3388
return -EINVAL;
3389
mac_proto = MAC_PROTO_NONE;
3390
break;
3391
3392
case OVS_ACTION_ATTR_PUSH_NSH:
3393
if (mac_proto != MAC_PROTO_ETHERNET) {
3394
u8 next_proto;
3395
3396
next_proto = tun_p_from_eth_p(eth_type);
3397
if (!next_proto)
3398
return -EINVAL;
3399
}
3400
mac_proto = MAC_PROTO_NONE;
3401
if (!validate_push_nsh(a, log))
3402
return -EINVAL;
3403
break;
3404
3405
case OVS_ACTION_ATTR_POP_NSH: {
3406
__be16 inner_proto;
3407
3408
if (eth_type != htons(ETH_P_NSH))
3409
return -EINVAL;
3410
inner_proto = tun_p_to_eth_p(key->nsh.base.np);
3411
if (!inner_proto)
3412
return -EINVAL;
3413
if (key->nsh.base.np == TUN_P_ETHERNET)
3414
mac_proto = MAC_PROTO_ETHERNET;
3415
else
3416
mac_proto = MAC_PROTO_NONE;
3417
break;
3418
}
3419
3420
case OVS_ACTION_ATTR_METER:
3421
/* Non-existent meters are simply ignored. */
3422
break;
3423
3424
case OVS_ACTION_ATTR_CLONE: {
3425
bool last = nla_is_last(a, rem);
3426
3427
err = validate_and_copy_clone(net, a, key, sfa,
3428
eth_type, vlan_tci,
3429
mpls_label_count,
3430
log, last, depth);
3431
if (err)
3432
return err;
3433
skip_copy = true;
3434
break;
3435
}
3436
3437
case OVS_ACTION_ATTR_CHECK_PKT_LEN: {
3438
bool last = nla_is_last(a, rem);
3439
3440
err = validate_and_copy_check_pkt_len(net, a, key, sfa,
3441
eth_type,
3442
vlan_tci,
3443
mpls_label_count,
3444
log, last,
3445
depth);
3446
if (err)
3447
return err;
3448
skip_copy = true;
3449
break;
3450
}
3451
3452
case OVS_ACTION_ATTR_DEC_TTL:
3453
err = validate_and_copy_dec_ttl(net, a, key, sfa,
3454
eth_type, vlan_tci,
3455
mpls_label_count, log,
3456
depth);
3457
if (err)
3458
return err;
3459
skip_copy = true;
3460
break;
3461
3462
case OVS_ACTION_ATTR_DROP:
3463
if (!nla_is_last(a, rem))
3464
return -EINVAL;
3465
break;
3466
3467
case OVS_ACTION_ATTR_PSAMPLE:
3468
err = validate_psample(a);
3469
if (err)
3470
return err;
3471
break;
3472
3473
default:
3474
OVS_NLERR(log, "Unknown Action type %d", type);
3475
return -EINVAL;
3476
}
3477
if (!skip_copy) {
3478
err = copy_action(a, sfa, log);
3479
if (err)
3480
return err;
3481
}
3482
}
3483
3484
if (rem > 0)
3485
return -EINVAL;
3486
3487
return 0;
3488
}
3489
3490
/* 'key' must be the masked key. */
3491
int ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
3492
const struct sw_flow_key *key,
3493
struct sw_flow_actions **sfa, bool log)
3494
{
3495
int err;
3496
u32 mpls_label_count = 0;
3497
3498
*sfa = nla_alloc_flow_actions(nla_len(attr));
3499
if (IS_ERR(*sfa))
3500
return PTR_ERR(*sfa);
3501
3502
if (eth_p_mpls(key->eth.type))
3503
mpls_label_count = hweight_long(key->mpls.num_labels_mask);
3504
3505
(*sfa)->orig_len = nla_len(attr);
3506
err = __ovs_nla_copy_actions(net, attr, key, sfa, key->eth.type,
3507
key->eth.vlan.tci, mpls_label_count, log,
3508
0);
3509
if (err)
3510
ovs_nla_free_flow_actions(*sfa);
3511
3512
return err;
3513
}
3514
3515
static int sample_action_to_attr(const struct nlattr *attr,
3516
struct sk_buff *skb)
3517
{
3518
struct nlattr *start, *ac_start = NULL, *sample_arg;
3519
int err = 0, rem = nla_len(attr);
3520
const struct sample_arg *arg;
3521
struct nlattr *actions;
3522
3523
start = nla_nest_start_noflag(skb, OVS_ACTION_ATTR_SAMPLE);
3524
if (!start)
3525
return -EMSGSIZE;
3526
3527
sample_arg = nla_data(attr);
3528
arg = nla_data(sample_arg);
3529
actions = nla_next(sample_arg, &rem);
3530
3531
if (nla_put_u32(skb, OVS_SAMPLE_ATTR_PROBABILITY, arg->probability)) {
3532
err = -EMSGSIZE;
3533
goto out;
3534
}
3535
3536
ac_start = nla_nest_start_noflag(skb, OVS_SAMPLE_ATTR_ACTIONS);
3537
if (!ac_start) {
3538
err = -EMSGSIZE;
3539
goto out;
3540
}
3541
3542
err = ovs_nla_put_actions(actions, rem, skb);
3543
3544
out:
3545
if (err) {
3546
nla_nest_cancel(skb, ac_start);
3547
nla_nest_cancel(skb, start);
3548
} else {
3549
nla_nest_end(skb, ac_start);
3550
nla_nest_end(skb, start);
3551
}
3552
3553
return err;
3554
}
3555
3556
static int clone_action_to_attr(const struct nlattr *attr,
3557
struct sk_buff *skb)
3558
{
3559
struct nlattr *start;
3560
int err = 0, rem = nla_len(attr);
3561
3562
start = nla_nest_start_noflag(skb, OVS_ACTION_ATTR_CLONE);
3563
if (!start)
3564
return -EMSGSIZE;
3565
3566
/* Skipping the OVS_CLONE_ATTR_EXEC that is always the first attribute. */
3567
attr = nla_next(nla_data(attr), &rem);
3568
err = ovs_nla_put_actions(attr, rem, skb);
3569
3570
if (err)
3571
nla_nest_cancel(skb, start);
3572
else
3573
nla_nest_end(skb, start);
3574
3575
return err;
3576
}
3577
3578
static int check_pkt_len_action_to_attr(const struct nlattr *attr,
3579
struct sk_buff *skb)
3580
{
3581
struct nlattr *start, *ac_start = NULL;
3582
const struct check_pkt_len_arg *arg;
3583
const struct nlattr *a, *cpl_arg;
3584
int err = 0, rem = nla_len(attr);
3585
3586
start = nla_nest_start_noflag(skb, OVS_ACTION_ATTR_CHECK_PKT_LEN);
3587
if (!start)
3588
return -EMSGSIZE;
3589
3590
/* The first nested attribute in 'attr' is always
3591
* 'OVS_CHECK_PKT_LEN_ATTR_ARG'.
3592
*/
3593
cpl_arg = nla_data(attr);
3594
arg = nla_data(cpl_arg);
3595
3596
if (nla_put_u16(skb, OVS_CHECK_PKT_LEN_ATTR_PKT_LEN, arg->pkt_len)) {
3597
err = -EMSGSIZE;
3598
goto out;
3599
}
3600
3601
/* Second nested attribute in 'attr' is always
3602
* 'OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL'.
3603
*/
3604
a = nla_next(cpl_arg, &rem);
3605
ac_start = nla_nest_start_noflag(skb,
3606
OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL);
3607
if (!ac_start) {
3608
err = -EMSGSIZE;
3609
goto out;
3610
}
3611
3612
err = ovs_nla_put_actions(nla_data(a), nla_len(a), skb);
3613
if (err) {
3614
nla_nest_cancel(skb, ac_start);
3615
goto out;
3616
} else {
3617
nla_nest_end(skb, ac_start);
3618
}
3619
3620
/* Third nested attribute in 'attr' is always
3621
* OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER.
3622
*/
3623
a = nla_next(a, &rem);
3624
ac_start = nla_nest_start_noflag(skb,
3625
OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER);
3626
if (!ac_start) {
3627
err = -EMSGSIZE;
3628
goto out;
3629
}
3630
3631
err = ovs_nla_put_actions(nla_data(a), nla_len(a), skb);
3632
if (err) {
3633
nla_nest_cancel(skb, ac_start);
3634
goto out;
3635
} else {
3636
nla_nest_end(skb, ac_start);
3637
}
3638
3639
nla_nest_end(skb, start);
3640
return 0;
3641
3642
out:
3643
nla_nest_cancel(skb, start);
3644
return err;
3645
}
3646
3647
static int dec_ttl_action_to_attr(const struct nlattr *attr,
3648
struct sk_buff *skb)
3649
{
3650
struct nlattr *start, *action_start;
3651
const struct nlattr *a;
3652
int err = 0, rem;
3653
3654
start = nla_nest_start_noflag(skb, OVS_ACTION_ATTR_DEC_TTL);
3655
if (!start)
3656
return -EMSGSIZE;
3657
3658
nla_for_each_attr(a, nla_data(attr), nla_len(attr), rem) {
3659
switch (nla_type(a)) {
3660
case OVS_DEC_TTL_ATTR_ACTION:
3661
3662
action_start = nla_nest_start_noflag(skb, OVS_DEC_TTL_ATTR_ACTION);
3663
if (!action_start) {
3664
err = -EMSGSIZE;
3665
goto out;
3666
}
3667
3668
err = ovs_nla_put_actions(nla_data(a), nla_len(a), skb);
3669
if (err)
3670
goto out;
3671
3672
nla_nest_end(skb, action_start);
3673
break;
3674
3675
default:
3676
/* Ignore all other option to be future compatible */
3677
break;
3678
}
3679
}
3680
3681
nla_nest_end(skb, start);
3682
return 0;
3683
3684
out:
3685
nla_nest_cancel(skb, start);
3686
return err;
3687
}
3688
3689
static int set_action_to_attr(const struct nlattr *a, struct sk_buff *skb)
3690
{
3691
const struct nlattr *ovs_key = nla_data(a);
3692
int key_type = nla_type(ovs_key);
3693
struct nlattr *start;
3694
int err;
3695
3696
switch (key_type) {
3697
case OVS_KEY_ATTR_TUNNEL_INFO: {
3698
struct ovs_tunnel_info *ovs_tun = nla_data(ovs_key);
3699
struct ip_tunnel_info *tun_info = &ovs_tun->tun_dst->u.tun_info;
3700
3701
start = nla_nest_start_noflag(skb, OVS_ACTION_ATTR_SET);
3702
if (!start)
3703
return -EMSGSIZE;
3704
3705
err = ip_tun_to_nlattr(skb, &tun_info->key,
3706
ip_tunnel_info_opts(tun_info),
3707
tun_info->options_len,
3708
ip_tunnel_info_af(tun_info), tun_info->mode);
3709
if (err)
3710
return err;
3711
nla_nest_end(skb, start);
3712
break;
3713
}
3714
default:
3715
if (nla_put(skb, OVS_ACTION_ATTR_SET, nla_len(a), ovs_key))
3716
return -EMSGSIZE;
3717
break;
3718
}
3719
3720
return 0;
3721
}
3722
3723
static int masked_set_action_to_set_action_attr(const struct nlattr *a,
3724
struct sk_buff *skb)
3725
{
3726
const struct nlattr *ovs_key = nla_data(a);
3727
struct nlattr *nla;
3728
size_t key_len = nla_len(ovs_key) / 2;
3729
3730
/* Revert the conversion we did from a non-masked set action to
3731
* masked set action.
3732
*/
3733
nla = nla_nest_start_noflag(skb, OVS_ACTION_ATTR_SET);
3734
if (!nla)
3735
return -EMSGSIZE;
3736
3737
if (nla_put(skb, nla_type(ovs_key), key_len, nla_data(ovs_key)))
3738
return -EMSGSIZE;
3739
3740
nla_nest_end(skb, nla);
3741
return 0;
3742
}
3743
3744
int ovs_nla_put_actions(const struct nlattr *attr, int len, struct sk_buff *skb)
3745
{
3746
const struct nlattr *a;
3747
int rem, err;
3748
3749
nla_for_each_attr(a, attr, len, rem) {
3750
int type = nla_type(a);
3751
3752
switch (type) {
3753
case OVS_ACTION_ATTR_SET:
3754
err = set_action_to_attr(a, skb);
3755
if (err)
3756
return err;
3757
break;
3758
3759
case OVS_ACTION_ATTR_SET_TO_MASKED:
3760
err = masked_set_action_to_set_action_attr(a, skb);
3761
if (err)
3762
return err;
3763
break;
3764
3765
case OVS_ACTION_ATTR_SAMPLE:
3766
err = sample_action_to_attr(a, skb);
3767
if (err)
3768
return err;
3769
break;
3770
3771
case OVS_ACTION_ATTR_CT:
3772
err = ovs_ct_action_to_attr(nla_data(a), skb);
3773
if (err)
3774
return err;
3775
break;
3776
3777
case OVS_ACTION_ATTR_CLONE:
3778
err = clone_action_to_attr(a, skb);
3779
if (err)
3780
return err;
3781
break;
3782
3783
case OVS_ACTION_ATTR_CHECK_PKT_LEN:
3784
err = check_pkt_len_action_to_attr(a, skb);
3785
if (err)
3786
return err;
3787
break;
3788
3789
case OVS_ACTION_ATTR_DEC_TTL:
3790
err = dec_ttl_action_to_attr(a, skb);
3791
if (err)
3792
return err;
3793
break;
3794
3795
default:
3796
if (nla_put(skb, type, nla_len(a), nla_data(a)))
3797
return -EMSGSIZE;
3798
break;
3799
}
3800
}
3801
3802
return 0;
3803
}
3804
3805