At any rate, the patch looks fine to me, I think you just need to add a void *p to the union in mac_entry.
Ethan On Mon, Mar 21, 2011 at 3:57 PM, Ethan Jackson <[email protected]> wrote: > This patch doesn't build for me. > > vswitchd/bridge.c:2787:43: error: 'union <anonymous>' has no member named 'p' > > On Mon, Mar 21, 2011 at 10:59 AM, Ben Pfaff <[email protected]> wrote: >> This takes a step toward changing the data structure used for keeping >> track of ports from an array to a more appropriate data structure. >> --- >> vswitchd/bridge.c | 20 +++++++++----------- >> 1 files changed, 9 insertions(+), 11 deletions(-) >> >> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c >> index 28fcd36..e18e2ce 100644 >> --- a/vswitchd/bridge.c >> +++ b/vswitchd/bridge.c >> @@ -1517,11 +1517,9 @@ bridge_unixctl_fdb_show(struct unixctl_conn *conn, >> >> ds_put_cstr(&ds, " port VLAN MAC Age\n"); >> LIST_FOR_EACH (e, lru_node, &br->ml->lrus) { >> - if (e->port.i < 0 || e->port.i >= br->n_ports) { >> - continue; >> - } >> + struct port *port = e->port.p; >> ds_put_format(&ds, "%5d %4d "ETH_ADDR_FMT" %3d\n", >> - port_get_an_iface(br->ports[e->port.i])->dp_ifidx, >> + port_get_an_iface(br->ports[port])->dp_ifidx, >> e->vlan, ETH_ADDR_ARGS(e->mac), mac_entry_age(e)); >> } >> unixctl_command_reply(conn, 200, ds_cstr(&ds)); >> @@ -2786,7 +2784,7 @@ update_learning_table(struct bridge *br, const struct >> flow *flow, int vlan, >> } >> >> mac_learning_touch(br->ml, mac); >> - if (mac_entry_is_new(mac) || mac->port.i != in_port->port_idx) { >> + if (mac_entry_is_new(mac) || mac->port.p != in_port) { >> /* The log messages here could actually be useful in debugging, >> * so keep the rate limit relatively high. */ >> static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300); >> @@ -2795,7 +2793,7 @@ update_learning_table(struct bridge *br, const struct >> flow *flow, int vlan, >> br->name, ETH_ADDR_ARGS(flow->dl_src), >> in_port->name, vlan); >> >> - mac->port.i = in_port->port_idx; >> + mac->port.p = in_port; >> ofproto_revalidate(br->ofproto, mac_learning_change(br->ml, mac)); >> } >> } >> @@ -2901,7 +2899,7 @@ is_admissible(struct bridge *br, const struct flow >> *flow, bool have_packet, >> * reflections on bond slaves. If this is the case, just drop the >> * packet now. */ >> mac = mac_learning_lookup(br->ml, flow->dl_src, vlan, NULL); >> - if (mac && mac->port.i != in_port->port_idx && >> + if (mac && mac->port.p != in_port && >> (!is_gratuitous_arp(flow) || mac_entry_is_grat_arp_locked(mac))) >> { >> return false; >> } >> @@ -2936,8 +2934,8 @@ process_flow(struct bridge *br, const struct flow >> *flow, >> >> /* Determine output port. */ >> mac = mac_learning_lookup(br->ml, flow->dl_dst, vlan, tags); >> - if (mac && mac->port.i >= 0 && mac->port.i < br->n_ports) { >> - out_port = br->ports[mac->port.i]; >> + if (mac) { >> + mac = mac->port.p; >> } else if (!packet && !eth_addr_is_multicast(flow->dl_dst)) { >> /* If we are revalidating but don't have a learning entry then >> * eject the flow. Installing a flow that floods packets opens >> @@ -3424,7 +3422,7 @@ bond_send_learning_packets(struct port *port) >> struct flow flow; >> int retval; >> >> - if (e->port.i == port->port_idx) { >> + if (e->port.p == port) { >> continue; >> } >> >> @@ -3600,7 +3598,7 @@ bond_unixctl_show(struct unixctl_conn *conn, >> >> memcpy(flow.dl_src, me->mac, ETH_ADDR_LEN); >> if (bond_hash_src(me->mac, me->vlan) == hash >> - && me->port.i != port->port_idx >> + && me->port.p != port >> && choose_output_iface(port, &flow, me->vlan, >> &dp_ifidx, &tags) >> && dp_ifidx == iface->dp_ifidx) >> -- >> 1.7.1 >> >> _______________________________________________ >> dev mailing list >> [email protected] >> http://openvswitch.org/mailman/listinfo/dev >> > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
