diff options
author | Ben Pfaff <blp@ovn.org> | 2017-04-05 23:08:09 -0700 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2017-04-07 15:50:50 -0700 |
commit | 2f2b904f9e28afaff3dfb7adaa62b96c0d144ace (patch) | |
tree | 97ed6aa637b4c93cc2386e87436675b62e26d1a9 /ofproto | |
parent | b2342f7a4bcadf60a368855de085ff12ae6a9d20 (diff) | |
download | openvswitch-2f2b904f9e28afaff3dfb7adaa62b96c0d144ace.tar.gz |
Add support for OpenFlow 1.6 (draft) port status and port mod messages.
OpenFlow 1.6 adds support for EUI-64 addresses for ports, and extends
the maximum length of OpenFlow port names from 16 to 64 bytes.
ONF-JIRA: EXT-566
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
Diffstat (limited to 'ofproto')
-rw-r--r-- | ofproto/ofproto-dpif-xlate.c | 2 | ||||
-rw-r--r-- | ofproto/ofproto-dpif.c | 6 | ||||
-rw-r--r-- | ofproto/ofproto.c | 6 |
3 files changed, 9 insertions, 5 deletions
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index ca286e372..a24aef9a4 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -4597,7 +4597,7 @@ xlate_output_trunc_action(struct xlate_ctx *ctx, { bool support_trunc = ctx->xbridge->support.trunc; struct ovs_action_trunc *trunc; - char name[OFP_MAX_PORT_NAME_LEN]; + char name[OFP10_MAX_PORT_NAME_LEN]; switch (port) { case OFPP_TABLE: diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 9556a0e0c..6a5ffb94f 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4845,7 +4845,7 @@ ofproto_unixctl_fdb_show(struct unixctl_conn *conn, int argc OVS_UNUSED, ovs_rwlock_rdlock(&ofproto->ml->rwlock); LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) { struct ofbundle *bundle = mac_entry_get_port(ofproto->ml, e); - char name[OFP_MAX_PORT_NAME_LEN]; + char name[OFP10_MAX_PORT_NAME_LEN]; ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port, name, sizeof name); @@ -4886,7 +4886,7 @@ ofproto_unixctl_mcast_snooping_show(struct unixctl_conn *conn, ovs_rwlock_rdlock(&ofproto->ms->rwlock); LIST_FOR_EACH (grp, group_node, &ofproto->ms->group_lru) { LIST_FOR_EACH(b, bundle_node, &grp->bundle_lru) { - char name[OFP_MAX_PORT_NAME_LEN]; + char name[OFP10_MAX_PORT_NAME_LEN]; bundle = b->port; ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port, @@ -4900,7 +4900,7 @@ ofproto_unixctl_mcast_snooping_show(struct unixctl_conn *conn, /* ports connected to multicast routers */ LIST_FOR_EACH(mrouter, mrouter_node, &ofproto->ms->mrouter_lru) { - char name[OFP_MAX_PORT_NAME_LEN]; + char name[OFP10_MAX_PORT_NAME_LEN]; bundle = mrouter->port; ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port, diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 84ea95b0c..7440d5b52 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -2346,6 +2346,7 @@ ofport_open(struct ofproto *ofproto, } pp->port_no = ofproto_port->ofp_port; netdev_get_etheraddr(netdev, &pp->hw_addr); + pp->hw_addr64 = eth_addr64_zero; ovs_strlcpy(pp->name, ofproto_port->name, sizeof pp->name); netdev_get_flags(netdev, &flags); pp->config = flags & NETDEV_UP ? 0 : OFPUTIL_PC_PORT_DOWN; @@ -2366,6 +2367,7 @@ ofport_equal(const struct ofputil_phy_port *a, const struct ofputil_phy_port *b) { return (eth_addr_equals(a->hw_addr, b->hw_addr) + && eth_addr64_equals(a->hw_addr64, b->hw_addr64) && a->state == b->state && !((a->config ^ b->config) & OFPUTIL_PC_PORT_DOWN) && a->curr == b->curr @@ -2460,6 +2462,7 @@ static void ofport_modified(struct ofport *port, struct ofputil_phy_port *pp) { port->pp.hw_addr = pp->hw_addr; + port->pp.hw_addr64 = pp->hw_addr64; port->pp.config = ((port->pp.config & ~OFPUTIL_PC_PORT_DOWN) | (pp->config & OFPUTIL_PC_PORT_DOWN)); port->pp.state = ((port->pp.state & ~OFPUTIL_PS_LINK_DOWN) @@ -3630,7 +3633,8 @@ port_mod_start(struct ofconn *ofconn, struct ofputil_port_mod *pm, if (!*port) { return OFPERR_OFPPMFC_BAD_PORT; } - if (!eth_addr_equals((*port)->pp.hw_addr, pm->hw_addr)) { + if (!eth_addr_equals((*port)->pp.hw_addr, pm->hw_addr) || + !eth_addr64_equals((*port)->pp.hw_addr64, pm->hw_addr64)) { return OFPERR_OFPPMFC_BAD_HW_ADDR; } return 0; |