projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bugtool: Collect "lacp/show" and "cfm/show" information.
[openvswitch]
/
lib
/
learning-switch.c
diff --git
a/lib/learning-switch.c
b/lib/learning-switch.c
index fc45b04349f035cd436e820d930efffeddb9bacc..b2608629afdfce8d0eb25cdc9c814d516c09264c 100644
(file)
--- a/
lib/learning-switch.c
+++ b/
lib/learning-switch.c
@@
-106,8
+106,9
@@
lswitch_create(struct rconn *rconn, const struct lswitch_config *cfg)
if (cfg->wildcards == UINT32_MAX) {
/* Try to wildcard as many fields as possible, but we cannot
* wildcard all fields. We need in_port to detect moves. We need
if (cfg->wildcards == UINT32_MAX) {
/* Try to wildcard as many fields as possible, but we cannot
* wildcard all fields. We need in_port to detect moves. We need
- * Ethernet source and dest and VLAN to do L2 learning. */
- ofpfw = (OFPFW_DL_TYPE | OFPFW_NW_SRC_ALL | OFPFW_NW_DST_ALL
+ * Ethernet source and dest and VLAN VID to do L2 learning. */
+ ofpfw = (OFPFW_DL_TYPE | OFPFW_DL_VLAN_PCP
+ | OFPFW_NW_SRC_ALL | OFPFW_NW_DST_ALL
| OFPFW_NW_TOS | OFPFW_NW_PROTO
| OFPFW_TP_SRC | OFPFW_TP_DST);
} else {
| OFPFW_NW_TOS | OFPFW_NW_PROTO
| OFPFW_TP_SRC | OFPFW_TP_DST);
} else {
@@
-138,10
+139,17
@@
lswitch_create(struct rconn *rconn, const struct lswitch_config *cfg)
const struct ofpbuf *b;
LIST_FOR_EACH (b, list_node, cfg->default_flows) {
const struct ofpbuf *b;
LIST_FOR_EACH (b, list_node, cfg->default_flows) {
- queue_tx(sw, rconn, ofpbuf_clone(b));
+ struct ofpbuf *copy = ofpbuf_clone(b);
+ int error = rconn_send(rconn, copy, NULL);
+ if (error) {
+ VLOG_INFO_RL(&rl, "%s: failed to queue default flows (%s)",
+ rconn_get_name(rconn), strerror(error));
+ ofpbuf_delete(copy);
+ break;
+ }
}
}
}
}
-
+
return sw;
}
return sw;
}
@@
-217,7
+225,7
@@
lswitch_process_packet(struct lswitch *sw, struct rconn *rconn,
/* Nothing to do. */
break;
/* Nothing to do. */
break;
- case OFPUTIL_INVALID:
+ case OFPUTIL_
MSG_
INVALID:
case OFPUTIL_OFPT_HELLO:
case OFPUTIL_OFPT_ERROR:
case OFPUTIL_OFPT_ECHO_REPLY:
case OFPUTIL_OFPT_HELLO:
case OFPUTIL_OFPT_ERROR:
case OFPUTIL_OFPT_ECHO_REPLY: