author | Mark Haywood <Mark.Haywood@Oracle.COM> |
Tue, 05 Apr 2016 20:57:21 -0700 | |
changeset 5730 | cca4aa297e68 |
parent 5090 | 5f131162e136 |
permissions | -rw-r--r-- |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
1 |
This patch fixes a bug in the test controller. |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
2 |
|
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
3 |
This patch was developed upstream in OVS 2.5. |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
4 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
5 |
diff --git a/lib/learning-switch.c b/lib/learning-switch.c |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
6 |
index f6182ba..e27f811 100644 |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
7 |
--- a/lib/learning-switch.c |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
8 |
+++ b/lib/learning-switch.c |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
9 |
@@ -180,10 +180,49 @@ static void |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
10 |
lswitch_handshake(struct lswitch *sw) |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
11 |
{ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
12 |
enum ofputil_protocol protocol; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
13 |
- |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
14 |
+ enum ofp_version version; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
15 |
send_features_request(sw); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
16 |
+ version = rconn_get_version(sw->rconn); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
17 |
+ protocol = ofputil_protocol_from_ofp_version(version); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
18 |
+ if (version >= OFP13_VERSION) { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
19 |
+ /* OpenFlow 1.3 and later by default drop packets that miss in the flow |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
20 |
+ * table. Set up a flow to send packets to the controller by |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
21 |
+ * default. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
22 |
+ struct ofputil_flow_mod fm; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
23 |
+ struct ofpact_output output; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
24 |
+ struct ofpbuf *msg; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
25 |
+ int error; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
26 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
27 |
- protocol = ofputil_protocol_from_ofp_version(rconn_get_version(sw->rconn)); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
28 |
+ ofpact_init_OUTPUT(&output); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
29 |
+ output.port = OFPP_CONTROLLER; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
30 |
+ output.max_len = OFP_DEFAULT_MISS_SEND_LEN; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
31 |
+ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
32 |
+ match_init_catchall(&fm.match); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
33 |
+ fm.priority = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
34 |
+ fm.cookie = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
35 |
+ fm.cookie_mask = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
36 |
+ fm.new_cookie = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
37 |
+ fm.modify_cookie = false; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
38 |
+ fm.table_id = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
39 |
+ fm.command = OFPFC_ADD; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
40 |
+ fm.idle_timeout = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
41 |
+ fm.hard_timeout = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
42 |
+ fm.importance = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
43 |
+ fm.buffer_id = UINT32_MAX; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
44 |
+ fm.out_port = OFPP_NONE; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
45 |
+ fm.out_group = OFPG_ANY; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
46 |
+ fm.flags = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
47 |
+ fm.ofpacts = &output.ofpact; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
48 |
+ fm.ofpacts_len = sizeof output; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
49 |
+ fm.delete_reason = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
50 |
+ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
51 |
+ msg = ofputil_encode_flow_mod(&fm, protocol); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
52 |
+ error = rconn_send(sw->rconn, msg, NULL); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
53 |
+ if (error) { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
54 |
+ VLOG_INFO_RL(&rl, "%s: failed to add default flow (%s)", |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
55 |
+ rconn_get_name(sw->rconn), ovs_strerror(error)); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
56 |
+ } |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
57 |
+ } |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
58 |
if (sw->default_flows) { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
59 |
struct ofpbuf *msg = NULL; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
60 |
int error = 0; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
61 |
diff --git a/lib/ofp-util.h b/lib/ofp-util.h |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
62 |
index ce6045b..622b928 100644 |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
63 |
--- a/lib/ofp-util.h |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
64 |
+++ b/lib/ofp-util.h |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
65 |
@@ -305,8 +305,10 @@ struct ofputil_flow_mod { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
66 |
ofp_port_t out_port; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
67 |
uint32_t out_group; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
68 |
enum ofputil_flow_mod_flags flags; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
69 |
+ uint16_t importance; /* Eviction precedence. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
70 |
struct ofpact *ofpacts; /* Series of "struct ofpact"s. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
71 |
size_t ofpacts_len; /* Length of ofpacts, in bytes. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
72 |
+ enum ofp_flow_removed_reason delete_reason; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
73 |
}; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
74 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
75 |
enum ofperr ofputil_decode_flow_mod(struct ofputil_flow_mod *, |