Yeah, oops. I added that here.
On Mon, Mar 21, 2011 at 04:00:19PM -0700, Ethan Jackson wrote: > 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
